Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > Логирование запросов в dbGo |
Автор: VihaVik 16.11.2007, 11:59 |
Подскажите как возможно логировать запросы посылаемые на сервер MS Jet.Ole.Db от DataSet-a. |
Автор: Rodman 17.11.2007, 23:29 |
что имеется ввиду под логирование... объясни по подробнее... |
Автор: VihaVik 19.11.2007, 12:13 |
При изменении записи, удалении записи и т.д. TADODataSet посылает команды СКЛ на сервер базы данных. Вот эти команды мне и надо перехватить (Просто записать в лог файл для дальнейшего анализа). Как логировать запросы на выборку я знаю, а вот как перехватить команды по изменению данных я найти не могу. Вот в этом и вопрос. Может кто-то сталкивался с этим? |
Автор: pseud 20.11.2007, 11:07 | ||
как? какие условия? прога работает сама по себе и надо перехватывать другой прогой? или ты находишься в этой проге что посылает запросы? тогда:
но видимо я не допонял |
Автор: VihaVik 20.11.2007, 16:01 | ||||
pseud,
Данный код записывает команды выборки которые идут через ADOConnection в СтрингЛист, а затем, при закрытии ДатаМодуля я сохраняю весь лог втекстовый файл.
получается в файле запись 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. Так что если кто сталкивался с этим, то подскажите, где можно эти команды перехватить? |
Автор: pseud 21.11.2007, 11:36 | ||
читаем help
помоему все понятно, этот метод перехватывает все Execute, а значит все SELECT, INSERT, UPDATE, DELETE и т.д. Добавлено через 2 минуты и 22 секунды а еще он возвращает RecordsAffected и мы можем залогировать сколько строк было удалено или изменено а еще он возвращает Error и мы можем залогировать что за ошибка произошла при выполнении нашего Execute вобщем ![]() |
Автор: VihaVik 21.11.2007, 13:53 | ||
Этот метод перехватывает только Execute используемые в свойстве CommandText элементов ADO (TADOCommand, TADODataSet, TADOQuery, TADOTable...). По крайней мере в лог заносятся только комманды которые непосредственно устанавливаются в этом свойстве. Мне же необходимо перехватить комманды которые посылаются при связке DBGrid-DataSource-ADODataset-ADOConnection. Т.Е. при изменении в гриде записей, удалении их и т.д. По ентому и интересует такой вопрос где в каком месте происходит перевод комманд в СКЛ и посылка их на сервер базы данных? И естественно в каком месте мне их перехватить? |
Автор: Akella 21.11.2007, 14:23 |
а может лучше всего на сервере делать логирование? |
Автор: VihaVik 21.11.2007, 14:52 | ||
Скорее всего это и будет решением. В любом случае если нарою решение то сообщю. А пока всем спасибо за ответы. |
Автор: Akella 21.11.2007, 15:27 |
Я не знаю, как с событиями в M$ SQL, просто в огнептице есть удобное средство, называемое треггерами |
Автор: VihaVik 21.11.2007, 16:06 |
Про МС СКЛ не скажу. База у меня под Аксесс. (Под ФБ переделывать ее нет смысла (не те деньги), по крайней мере не на данном этапе, база не моя и программа управления данными тоже не моя). Механизм репликации мне не подходит. Пользователи работают с отключенным набором данных, т.е. с файлами ADTG. Приносят на серверный комп данные. Программа делает публикацию в базе данных с помощью UpdateBatch. Т.е. не мной реализованная и выполненная модель Briefcase. И в этот момент возникает ошибка обновления. Документации по программе - кот наплакал - ни нормальных исходников, ни-че-го... Мне нужно сейчас проконтролировать процесс ввода данных удаленными пользователями, записать их изменения в лог. И попытаться определить где возникает ошибка. Потому что сама программа пишет - ошибка обновления и усе. У меня покрайней мере есть нормальные исходники удаленного клиента, вот в нем я и хочу запостить логер. Ну надеюсь я ситуацию в кратце описал. Под ФБ конечно с этим делом былобы намного легче, но...... |