Как я могу контролировать команды SQL, отправленные через мое соединение ADO? - PullRequest
2 голосов
/ 14 января 2010

Мне нужно перехватить все команды SQL, которые проходят между компонентом подключения ADO и сервером базы данных. что-то вроде TSQLmonitor в dbExpress, но для ADO.

Кто-нибудь знает какой-либо сторонний компонент, который реализует эту функцию?

UPDATE

Я хочу сделать, чтобы программно (по коду) отслеживать операторы SQL из моего приложения без использования внешнего инструмента. для любой базы данных.

Ответы [ 4 ]

8 голосов
/ 15 января 2010

Я нашел решение, используйте событие TAdoConnection.OnWillExecute (которое происходит после того, как сервер базы данных сообщает о принятии команды.)

Подробнее здесь

procedure TDataModuleProd.ADOConnection1WillExecute(
  Connection: TADOConnection; var CommandText: WideString;
  var CursorType: TCursorType; var LockType: TADOLockType;
  var CommandType: TCommandType; var ExecuteOptions: TExecuteOptions;
  var EventStatus: TEventStatus; const Command: _Command;
  const Recordset: _Recordset);
begin
   AddLog(CommandText);
end;

Я написал небольшую статью в своем блоге для тех, кто хочет получить больше информации.

http://theroadtodelphi.wordpress.com/2010/02/21/build-your-own-profiler-using-ado/

6 голосов
/ 15 января 2010

Если ваша база данных MS-SQL, вы можете отслеживать трафик SQL с помощью инструмента SQL Profiler . Существует множество руководств по настройке, включая этот .

0 голосов
/ 07 апреля 2010

Я написал, как использовать Windbg в качестве SQL profiler для получения всех вызовов SQL из приложения.

Это можно легко изменить, чтобы использовать его для любой базы данных. Этим я пытаюсь продемонстрировать, как мы можем отследить что-либо из нижней части стека.

0 голосов
/ 15 января 2010

Поскольку вы запрашиваете какой-либо механизм базы данных, я полагаю, что единственный надежный подход состоит в том, чтобы инструктировать ваше приложение для регистрации SQL перед его выполнением. Есть несколько способов сделать это, от создания объектов-потомков из существующих TAdoxxxx, до создания простых функций, которые вы должны не забывать вызывать каждый раз, когда хотите что-то проверить. Что касается ведения журнала, одним из предпочтительных методов является использование outputdebugstring для отправки его на консоль отладки. Когда Delphi запущен, это отобразится в окне сообщений. Существует автономный исполняемый файл DebugView , который можно использовать в удаленных системах.

Если вы просто хотите получить доступ к SQL во время отладки (чтобы вы могли тестировать и настраивать внешние для вашего приложения) и используете компонент tAdoQuery, вы можете использовать оценщик отладки, чтобы сохранить его в файл. Просто установите точку останова прямо перед открытием, затем в точке останова запустите оценщик отладки и введите имя компонента запроса, а затем: .sql.savetofile('c:\sqlfilename.sql'), а затем нажмите return, он сохранит весь существующий SQL в указанном файле. , Это может быть спасением, если ваш SQL генерируется или слишком велик для просмотра с помощью инспектора отладки.

...