Delphi 用于检测空闲SQL连接的TraceCallBackEvent用法

Delphi 用于检测空闲SQL连接的TraceCallBackEvent用法,delphi,connection,trace,dbx,Delphi,Connection,Trace,Dbx,使用Delphi 2006;我的目标是检查TSQLConnection实例是否空闲。因此,每次看到活动时,我都将Datetime“mu dLastActivity”设置为“now” 由于TSQLMonitor的跟踪处理存在缺陷并导致内存问题(请参阅),我尝试使用SetTraceCallbackEvent注册自己的跟踪回调: procedure TConnectionGuard.SetSQLConnection(const Value: TSQLConnection); begin ...

使用Delphi 2006;我的目标是检查TSQLConnection实例是否空闲。因此,每次看到活动时,我都将Datetime“mu dLastActivity”设置为“now”

由于TSQLMonitor的跟踪处理存在缺陷并导致内存问题(请参阅),我尝试使用SetTraceCallbackEvent注册自己的跟踪回调:

procedure TConnectionGuard.SetSQLConnection(const Value: TSQLConnection);
begin
   ...    
   if Assigned ( Value )
   and not ( csDesigning in ComponentState ) then begin
      ...
      m_SQLConnection.SetTraceCallbackEvent(U_ConnectionGuard.OnTraceCallBack, integer(self));
      ...
   end;
end;
回调只是将数据返回给注册它的TConnectionGuard对象:

function OnTraceCallBack( CallType: TRACECat; CBInfo: Pointer): CBRType; stdcall;
var Desc: pSQLTraceDesc;
begin
   Desc := pSQLTraceDesc(CBInfo);
   Result := TConnectionGuard(Desc.ClientData).OnTraceCallBack(CallType, CBInfo);
end;
活动本身:

function TConnectionGuard.OnTraceCallBack(CallType: TRACECat; Desc: pSQLTraceDesc): CBRType;
begin
   m_dLastActivity := now;
   Result := cbrUSEDEF;
end;
到目前为止,一切顺利,一切顺利。但是,我不知道必须将什么作为CBRType结果(在DBCommonTypes.pas中定义)传递回去才能将性能影响降到最低,这一事实让我感到非常不舒服。事实上,我不知道我在回答什么,因为给定的参数CallCAT没有提供如何读取/处理它的提示

有人知道cbrUSEDEF是否是进行最低限度跟踪的正确方法吗

编辑:通过TSQLMonitor的源代码,我意识到给定的CBInfo指针不是我注册的客户机信息,而是包含客户机信息的psQLTraceDesc(在本例中,是指向我的Guard的指针)。我已经根据这一事实调整了这些方法…

请注意,这样您就不能再访问
qc.embarcadero.com
链接了。如果您需要访问旧的QC数据,请查看。