Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Логирование запросов в dbGo, Логирование запросов на измен.удаление 
:(
    Опции темы
VihaVik
Дата 16.11.2007, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 17.9.2007

Репутация: нет
Всего: 1



Подскажите как возможно логировать запросы посылаемые на сервер MS Jet.Ole.Db от DataSet-a.
PM MAIL   Вверх
Rodman
Дата 17.11.2007, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



что имеется ввиду под логирование... объясни по подробнее...

Это сообщение отредактировал(а) Rodman - 17.11.2007, 23:35
PM MAIL WWW Skype GTalk YIM MSN   Вверх
VihaVik
Дата 19.11.2007, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 17.9.2007

Репутация: нет
Всего: 1



При изменении записи, удалении записи и т.д. TADODataSet посылает команды СКЛ на сервер базы данных. Вот эти команды мне и надо перехватить (Просто записать в лог файл для дальнейшего анализа). Как логировать запросы на выборку я знаю, а вот как перехватить команды по изменению данных я найти не могу. Вот в этом и вопрос. Может кто-то сталкивался с этим?
PM MAIL   Вверх
pseud
Дата 20.11.2007, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Цитата(VihaVik @  19.11.2007,  12:13 Найти цитируемый пост)
Как логировать запросы на выборку я знаю,


как?

какие условия? прога работает сама по себе и надо перехватывать другой прогой? или ты находишься в этой проге что посылает запросы? тогда:
Код

ShowMessage(ADODataSet1.CommandText);

но видимо я не допонял


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
VihaVik
Дата 20.11.2007, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 17.9.2007

Репутация: нет
Всего: 1



pseud
Цитата

Как логировать запросы на выборку я знаю,



как?


Данный код записывает команды выборки которые идут через ADOConnection в СтрингЛист, а затем,  при закрытии ДатаМодуля я сохраняю весь лог втекстовый файл.
Код


Var
MonitorLog:TStringList;
....

procedure TDatMod.ConnectionBSExecuteComplete(Connection: TADOConnection;
  RecordsAffected: Integer; const Error: Error;
  var EventStatus: TEventStatus; const Command: _Command;
  const Recordset: _Recordset);
begin
  MonitorLog.Add(Command.CommandText);
end;


получается в файле запись
select Id_Zakaz, Nomer_Zakaz, Date_Zakaz, Zakazchik, Data_Vidachi_Zakaz from Zakazi
select * from Zakazchiki
select * from Zakazi where Id_Zakaz = 11
select * from Works
select * from Zakazchiki



Но мне нужно записывать не только команды выборки (SELECT), но и комманды изменения удаления записей, т.е. INSERT, DELETE, UPDATE.
Так что если кто сталкивался с этим, то подскажите, где можно эти команды перехватить?
PM MAIL   Вверх
pseud
Дата 21.11.2007, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



читаем help

Код

Occurs after a command is executed.

TExecuteCompleteEvent = procedure(Connection: TADOConnection; RecordsAffected: Integer; const Error: Error; var EventStatus: TEventStatus; const Command: _Command; const Recordset: _Recordset) of object;
property OnExecuteComplete: TExecuteCompleteEvent read FOnExecuteComplete write FOnExecuteComplete;

Description

Write an OnExecuteComplete event handler to take specific action after the ADO connection object has successfully executed a command. The OnExecuteComplete event fires after the corresponding operation (executing an ADO command) has completed execution at the ADO Connection object. Calling the Execute method will lead to this event occurring.

Connection indicates the TADOConnection component executing the ADO command.

RecordsAffected indicated the number of rows in the table that were affected by the execution of the command. For instance, if the command deletes rows in a table, RowsAfftected indicates how many rows were deleted (possibly less than all rows if a WHERE clause is used in the command).

Error is an ADO Error object. See the Microsoft Data Access SDK for more information on using ADO Error objects. The Error parameter is only set if an error occurred during execution of the operation that triggered the event. In this case, the EventStatus parameter will contain the indicating value esErrorsOccured.

The EventStatus value (ADO EventStatusEnum) indicates the success or failure of the execution of the operation that triggered the event.

Command is the ADO Command object executing the command. If no Command object was used, this parameter contains a nil value.

Recordset is an ADO Recordset object containing the result set for the command. Recordset only contains an ADO Recordset object if the command was a SELECT statement, otherwise it contains a nil value.


помоему все понятно, этот метод перехватывает все Execute, а значит все SELECT, INSERT, UPDATE, DELETE и т.д.

Добавлено через 2 минуты и 22 секунды
а еще он возвращает RecordsAffected и мы можем залогировать сколько строк было удалено или изменено 
а еще он возвращает Error и мы можем залогировать что за ошибка произошла при выполнении нашего Execute
вобщем  smile 


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
VihaVik
Дата 21.11.2007, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 17.9.2007

Репутация: нет
Всего: 1



Цитата

 этот метод перехватывает все Execute, а значит все SELECT, INSERT, UPDATE, DELETE и т.д


Этот метод перехватывает только Execute используемые в свойстве CommandText элементов ADO (TADOCommand, TADODataSet, TADOQuery, TADOTable...). По крайней мере в лог заносятся только комманды которые непосредственно устанавливаются в этом свойстве.
Мне же необходимо перехватить комманды которые посылаются при связке DBGrid-DataSource-ADODataset-ADOConnection. Т.Е. при изменении в гриде записей, удалении их и т.д.

По ентому и интересует такой вопрос где в каком месте происходит перевод комманд в СКЛ и посылка их на сервер базы данных? И естественно в каком месте мне их перехватить?


PM MAIL   Вверх
Akella
Дата 21.11.2007, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



а может лучше всего на сервере делать логирование?
PM MAIL   Вверх
VihaVik
Дата 21.11.2007, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 17.9.2007

Репутация: нет
Всего: 1



Цитата

а может лучше всего на сервере делать логирование?


Скорее всего это и будет решением. 

В любом случае если нарою решение то сообщю. А пока всем спасибо за ответы.
PM MAIL   Вверх
Akella
Дата 21.11.2007, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Я не знаю, как с событиями в M$ SQL, просто в огнептице есть удобное средство, называемое треггерами
PM MAIL   Вверх
VihaVik
Дата 21.11.2007, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 17.9.2007

Репутация: нет
Всего: 1



Про МС СКЛ не скажу. База у меня под Аксесс. (Под ФБ переделывать ее нет смысла (не те деньги), по крайней мере не на данном этапе, база не моя и программа управления данными тоже не моя). Механизм репликации мне не подходит. Пользователи работают с отключенным набором данных, т.е. с файлами ADTG. Приносят на серверный комп данные. Программа делает публикацию в базе данных с помощью UpdateBatch. Т.е. не мной реализованная и выполненная модель Briefcase. И в этот момент возникает ошибка обновления. Документации по программе - кот наплакал - ни нормальных исходников, ни-че-го... Мне нужно сейчас проконтролировать процесс ввода данных удаленными пользователями, записать их изменения в лог. И попытаться определить где возникает ошибка.  Потому что сама программа пишет - ошибка обновления и усе. У меня покрайней мере есть нормальные исходники удаленного клиента, вот в нем я и хочу запостить логер.
Ну надеюсь я ситуацию в кратце описал.
Под ФБ конечно с этим делом былобы намного легче, но......

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0769 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.