我该如何监控Delphi应用程序执行的SQL语句?

4

在Delphi XE中,有没有一种方法可以拥有一个SQL监视器,跟踪应用程序执行的所有SQL操作?Delphi 5中有一个组件可以实现此功能。


1
SQL Monitor 与 BDE 兼容,您仍在使用 BDE 还是其他组件? - RRUZ
@Sertac,我认为OP所说的是Sql Monitor工具,它是Delphi IDE 5的一部分。 - RRUZ
@RRUZ - 抱歉,我不知道那个。希望楼主能发布更多详细信息。 - Sertac Akyuz
3
欢迎来到StackOverflow。你的问题只能回答“可能”,因为你的提问方式并没有提及你所使用的数据库引擎或数据访问控件,这些是此问题必要的信息。请编辑你的问题并提供更多信息(如正在使用的数据库引擎,用于访问该DBMS的哪些组件以及你在Delphi 5中使用的组件)。谢谢 :) - Ken White
1
@Sam 如果不是特定于DBMS,至少是特定于组件的。例如,我们为ORM的DB访问层提供了自动SQL日志记录。这将适用于所有DBMS,因为SQL日志记录是在抽象层中完成的。但据我所知,在Delphi中没有“通用”解决方案。即使Delphi 5的解决方案也是特定于BDE的。 - Arnaud Bouchez
显示剩余3条评论
2个回答

2

如此建议,您可以使用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
  {$ifdef DEBUG}
     OutputDebugString(PChar('SQL Execute: ' + CommandText));
  {$endif}
end;

1
抱歉...你在问题中哪里看到了ADO的提及?我可能错过了。 :) - Ken White
使用此方法,您将失去绑定参数的值...这些信息并不是很相关...至少需要检索它们并将它们添加到已记录的文本中。 - Arnaud Bouchez
谢谢,如何在Delphi XE中显示控制台? - Gwenael

0
如果您使用Devart UniDAC组件进行数据库操作,它们有一个完美的工具:https://www.devart.com/dbmonitor/。另一种选择是为您正在使用的SQL组件编写包装器,并自己将所有信息写入日志文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接