三层结构怎么在中间监视客户端提交过来的SQL DataSetProvider的poAllowCommandText设置为True了以后,想在服务器段监视客户端提交的SQL,怎么做,谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 查了一个相关Provider类,似乎没找到什么地方可以进行监视的入口,不过另外有一种方法就是将TDataSetProvider进行改写在DoBeforeExecute处截掉,须注意的是,如果将这个暴露出一个监视接口,那么参数CommandText就需要使用const声明,除非有必要内部进行调整。 另外还有一个方法就是在TDataSet上作文章。protected { IProviderSupport } procedure PSEndTransaction(Commit: Boolean); virtual; procedure PSExecute; virtual; function PSExecuteStatement(const ASQL: string; AParams: TParams; ResultSet: Pointer = nil): Integer; virtual; procedure PSGetAttributes(List: TList); virtual; function PSGetDefaultOrder: TIndexDef; virtual; function PSGetKeyFields: string; virtual; function PSGetParams: TParams; virtual; function PSGetQuoteChar: string; virtual; function PSGetTableName: string; virtual; function PSGetIndexDefs(IndexTypes: TIndexOptions): TIndexDefs; virtual; function PSGetUpdateException(E: Exception; Prev: EUpdateError): EUpdateError; virtual; function PSInTransaction: Boolean; virtual; function PSIsSQLBased: Boolean; virtual; function PSIsSQLSupported: Boolean; virtual; procedure PSReset; virtual; procedure PSSetParams(AParams: TParams); virtual; procedure PSSetCommandText(const CommandText: string); virtual; procedure PSStartTransaction; virtual; function PSUpdateRecord(UpdateKind: TUpdateKind; Delta: TDataSet): Boolean; virtual;这是TDataSet的接口部分,而这里面主要关心的是PSSetCommandText和PSExecute,这样子就看你当前所使用的DataSet类这两个过程的实体是否还有外部接口,可以用于监视。当然也要以自己继续TDataSet去做出处理。 在双击了“frxReport1”后,接下来要怎么做? DELPHI写的带窗口的最简程序,占用4.1M的堆 为了做一个通用的搜索窗,请教各位大侠 讨论一下Delphi中AS的用法? 帮忙看看 PaxScript脚本运行后怎么停止 在A程序中运行另一程序B后,怎样在不关闭B的情况下,继续执行A中的代码? 有没有这样的函数吗? 关于Delphi访问数据库的问题 如何汉化DELPHI5! 请问在VC中定义的char类型在Delphi中怎么定义 windows server2003 上 MSSQL2000企业版 访问问题
protected
{ IProviderSupport }
procedure PSEndTransaction(Commit: Boolean); virtual;
procedure PSExecute; virtual;
function PSExecuteStatement(const ASQL: string; AParams: TParams;
ResultSet: Pointer = nil): Integer; virtual;
procedure PSGetAttributes(List: TList); virtual;
function PSGetDefaultOrder: TIndexDef; virtual;
function PSGetKeyFields: string; virtual;
function PSGetParams: TParams; virtual;
function PSGetQuoteChar: string; virtual;
function PSGetTableName: string; virtual;
function PSGetIndexDefs(IndexTypes: TIndexOptions): TIndexDefs; virtual;
function PSGetUpdateException(E: Exception; Prev: EUpdateError): EUpdateError; virtual;
function PSInTransaction: Boolean; virtual;
function PSIsSQLBased: Boolean; virtual;
function PSIsSQLSupported: Boolean; virtual;
procedure PSReset; virtual;
procedure PSSetParams(AParams: TParams); virtual;
procedure PSSetCommandText(const CommandText: string); virtual;
procedure PSStartTransaction; virtual;
function PSUpdateRecord(UpdateKind: TUpdateKind; Delta: TDataSet): Boolean; virtual;
这是TDataSet的接口部分,而这里面主要关心的是PSSetCommandText和PSExecute,这样子就看你当前所使用的DataSet类这两个过程的实体是否还有外部接口,可以用于监视。当然也要以自己继续TDataSet去做出处理。