logo site
Страницы
  • Карта Сайта
Реклама
Рубрики
  • Basic
  • C#
  • Flash
  • Net
  • Objective-C
  • Pascal
  • Ruby
  • SQL
  • Новости
  • Проектирование и архитектура
  • Фортран
Партнеры: Предлагаем обучение электробезопасность. Обучение электриков и допуск электробезопасность. . План праздничных мероприятий, клуб милк москва, заказ билетов по телефону.
сентября
17

Мониторинг запросов SQL во время работы с компонентами ADO

Автор: admin, размещено в: Новости, комментарии: Комментариев нет

Не есть секретом, что программы БД составляют достаточно большую долю многих приложений, которые снова разрабатываются. Ни одну информационную систему не можно было создать, когда отсутствовало соединение к одной или другой СУБД. Первые версии нам предлагали давно устаревшего, однако все ещё успешно использующего Borland Database Engine или BDE.
Альтернативным способом доступа к источникам различных данных являются ADO-компоненты.

Диалоговое окно отслеживания запросов SQL

Хотя новые версии Delphi владеют более современными компонентами dbExpress, и так же огромным количеством компонентов посторонних производителей, компонентам ADO все ещё стоит привлечь внимание. Через простоту использования, интеграцию с кругом разработки (вместе с поставкой Delphi Enterpise), а так же высокую скорость работы появляется смысл для их использования, ежели не планируется переходит к мультиплатформенной разработке.

Первым рассматриваемым компонентом является TADOConnection. Не будем детально рассматривать процесс настройки соединений, информацию про это можно увидеть и в Справки. Хотелось бы отметить, что мониторинг запросов sql при работе с компонентами ADO отсутствует. А во время отладки приложений данная возможность будет не самой последней. А особенно во время работы с запросами параметров. С помощью мониторинга можно визуально отслеживать, что в реальности принимает сервер БД. Сильно актуальным этот режим превратился на компьютере клиента. С собой таскать Delphi IDE нет особого желания. И не на каждый компьютер примет это поле разработки. Чтобы реализовать функции мониторинга, предлагаем пару методов для событий ExecuteComplete и WillExecute, TADOConnection компоненты.

fExecuteTime: dword;

…

procedure TDM.dbConnectionWillExecute(
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
);
var
i,j: integer;
infoStr: String;
tmpParameters: Parameters;
begin
if gDebugMode
then MonitorEvent(’WillExecute.. ‘,[]);
fExecuteTime:=GetTickCount;
if gSqlMonitor and gDebugMode then
begin
MonitorEvent(CommandText,['']);
if Assigned(Recordset) then
begin
for i := 0 to (dbConnection.DataSetCount-1) do
if Assigned(dbConnection.DataSets[i].Recordset)
and (Recordset = dbConnection.DataSets[i].Recordset) then
if (dbConnection.DataSets[i] is TADODataSet)
and (TADODataSet(dbConnection.DataSets[i]).
Parameters.Count > 0)
then
for j:=0 to TADODataSet(dbConnection.DataSets[i]).
Parameters.Count-1 do
begin
infoStr:=’P['+IntToStr(j)+'] ‘
+TADODataSet(dbConnection.DataSets[i]).
Parameters.Items[j].Name+’ = ‘;
if Not VarisNull(TADODataSet(dbConnection.DataSets[i]).
Parameters.Items[j].Value) then
infoStr:=infoStr+String(TADODataSet(dbConnection.DataSets[i]).
Parameters.Items[j].Value)
else
infoStr:=infoStr + ‘Null’;
MonitorEvent(infoStr,['']);
end;
end;
if Assigned(Command) then
begin
tmpParameters:=Command.Get_Parameters;
if (tmpParameters.Count > 0) then
for j:=0 to tmpParameters.Count - 1 do
begin
infoStr:=tmpParameters.Item[j].Name+’ = ‘;
if Not VarisNull(tmpParameters.Item[j].Value) then
infoStr:=infoStr + String(tmpParameters.Item[j].Value)
else
infoStr:=infoStr + ‘Null’;
MonitorEvent(infoStr,['']);
end
end;
MonitorEvent(”,['']);
end;
end;

procedure TDM.dbConnectionExecuteComplete(
Connection: TADOConnection;
RecordsAffected: Integer;
const Error: Error;
var EventStatus: TEventStatus;
const Command: _Command;
const Recordset: _Recordset
);
begin
Self.fExecuteTime:=GetTickCount-Self.fExecuteTime;
if gDebugMode
then MonitorEvent(’Execute time: ‘
+FloatToStr(Self.fExecuteTime / 1000)+’ s.’,[]);
end;

Чтобы управлять режимом отладки и мониторинга, прибегнули к введению глобальных переменных gDebugMode и gSqlMonitor. Функцию MonitorEvent (для вывода окна мониторинга) не приводим, ибо написать её просто. На пример реализации окна мониторинга SQL можете посмотреть на рисунке.

Комментирование закрыто.

  • Категории
  • Новости
  • Популярное
  • Комментарии
  • Архив
Programmirovanie. Все права защищены