Отладка приложений с технологией dbExpress
Таким образом, разработчик получает компактный и симпатичный компонент, позволяющий без усилий получать информацию о прохождении команд в соединении.
Если же компонент TSQLMonitor не подходит, можно воспользоваться методом:
procedure SetTraceCallbackEvent(Event: TSQLCallbackEvent; IClientlnfo: Integer);
…компонента TSQLConnection. Параметр процедурного типа Event определяет функцию, которая будет вызываться при выполнении каждой команды. Параметр iclientinfo должен содержать любое число.
Он позволяет разработчику самостоятельно определить функцию типа:
TSQLCallbackEvent: TRACECat = TypedEnum; TSQLCallbackEvent = function(CallType: TRACECat; CBInfo: Pointer): CBRType; stdcall;
Эта функция будет вызываться каждый раз при прохождении команды. Текст команды будет передаваться в буфер CBInfo. Разработчику необходимо лишь выполнить запланированные действия с буфером внутри функции.
Рассмотрим в качестве примера следующий исходный код.
function GetTracelnfо(CallType: TRACECat; CBInfo: Pointer): CBRType; stdcall; begin if Assigned(Forml.TraceList) then Forml.TraceList.Add(pChar(CBinfo)); end; procedure TForml.MyConnectionBeforeConnect(Sender: TObject); begin TraceList: = TStringList.Create; end; procedure TForml.MyConnectionAfterDisconnect(Sender: TObject); begin if Assigned(TraceList) then begin TraceList.SaveToFile('с:\Temp\TraceInfo.txt'); TraceList.Free; end; end; procedure TForml.StartBtnClick(Sender: TObject); begin MyConnection.SetTraceCallbackEvent(GetTracelnfo, 8); MyConnection.Open; {…} MyConnection.Close; end;
Перед открытием соединения в методе-обработчике BeforeConnection создается объект типа TStringList. После закрытия соединения этот объект сохраняется в файле и уничтожается.
Перед открытием соединения (метод-обработчик нажатия кнопки Start) при помощи метода SetTraceCallbackEvent с соединением связывается функция GetTracelnfo.
Таким образом, по мере прохождения команд информация о них будет накапливаться в списке. После закрытия соединения список сохраняется в текстовом файле.
Примечание
В своей работе компонент TSQLMonitor также использует вызовы метода SetTraceCallbackEvent. Поэтому одновременно применять компонент и собственные функции нельзя.