【发布时间】:2019-10-25 08:22:07
【问题描述】:
我有 TClientDataSet、TDataSetProvider 和 TIBQuery 链,在执行 CDS.Post 时出现“未准备好的语句”错误,显然,TDataSetProvider 生成的更新语句是错误的。如何捕获此更新 SQL? SQL 监控不适用于我的 IBX 组件。我尝试过使用代码(灵感来自TClientDataset.ApplyUpdates fails with 'SQL not supported' when using SQLDirect components):
procedure TSQLResolver.DoExecSQL(SQL: TWideStringList; Params: TParams);
var
RowsAffected: Integer;
TmpList: TStringList;
begin
TmpList:=TStringList.Create;
TmpList.LoadFromFile('C:\Test\test.txt');
RowsAffected := (Provider.DataSet as IProviderSupport).PSExecuteStatement(SQL.Text, Params);
if not (poAllowMultiRecordUpdates in Provider.Options) and (RowsAffected > 1) then
begin
TmpList.Add(SQL.Text);
TmpList.SaveToFile('C:\Test\test.txt');
TmpList.Free;
(Provider.DataSet as IProviderSupport).PSEndTransaction(False);
Provider.TransactionStarted := False;
DatabaseError(STooManyRecordsModified);
end;
if RowsAffected < 1 then
DatabaseError(SRecordChanged);
end;
但 Test/test.txt 文件中没有写入任何内容。我在哪里可以放置这样的日志记录代码?
Delphi 2010 但我猜这适用于任何版本的 Delphi。
【问题讨论】:
标签: delphi interbase tclientdataset tdatasetprovider