|
Отладка приложений с технологией dbExpress
Наряду с обычными методами отладки
исходного кода, в dbExpress существует возможность контроля
запросов, проходящих на сервер через соединение. Для
этого используется компонент TSQLMonitor.
Через свойство
property SQLConnection:
TSQLConnection;
компонент связывается с отлаживаемым
соединением. Затем компонент включается установкой
Active = True.
Теперь во время выполнения приложения
сразу после открытия соединения свойство
property TraceList:
TStrings;
будет заполняться информацией обо всех
проходящих командах. Содержимое этого списка можно сохранить
в файле при помощи метода
procedure SaveToFile(AFileName:
string);
Эту же информацию можно автоматически
добавлять в текстовый файл, определяемый свойством
property FileName:
string;
но только тогда, когда свойство
property AutoSave:
Boolean;
будет иметь значение True.
Свойство
property MaxTraceCount:
Integer;
определяет максимальное число контролируемых
команд, а также управляет процессом контроля. При значении
-1 ограничения снимаются, а при значении 0 контроль
останавливается. Текущее число проверенных команд содержится
в свойстве
property TraceCount:
Integer;
Перед записью команды в список вызывается
метод-обработчик
TTraceEvent = procedure(Sender:
TObject; CBInfo: pSQLTRACEDesc;
var LogTrace:
Boolean) of object;
property OnTrace:
TTraceEvent;
а сразу после записи в список вызывается
TTraceLogEvent =
procedure (Sender: TObject; CBInfo: pSQLTRACEDesc)
of object;
property OnLogTrace:
TTraceLogEvent;
Таким образом, разработчик получает
компактный и симпатичный компонент, позволяющий без
усилий получать информацию о прохождении команд в соединении.
Если же компонент 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. Поэтому
одновременно применять компонент и собственные функции
нельзя.
|