我有 TClientDataSet、TDataSetProvider 和 TIBQuery 链,并且在执行 CDS.Post 时出现“未准备好的语句”错误,显然,TDataSetProvider 生成的更新语句是错误的。如何捕获此更新 SQL?SQL 监控不适用于我的 IBX 组件。我尝试使用代码(受TClientDataset 启发。使用 SQLDirect 组件时,ApplyUpdates 失败并出现“不支持 SQL”):
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。