由于数据库表约束,TClientDataset ApplyUpdates错误

Jak*_*ako 3 database delphi tclientdataset delphi-7

我有一个旧的Delphi 7应用程序,它从一个数据库表加载数据,进行许多操作和计算,最后将记录写入目标表.

出于性能原因,这个旧应用程序每500条记录调用ApplyUpdates.

问题在于,有时候,在这一堆记录中会出现一个会触发数据库约束的记录; Delphi 在ApplyUpdates上触发异常.

我的问题是我不知道哪个记录负责此异常.有500名候选人!

有可能问TClientDataset这是违法记录吗?

我不希望ApplyUpdates foreach附加记录的速度问题.

TLa*_*ama 7

我想你可能会尝试OnReconcileError为每个无法应用于数据集的记录实现一次被触发的事件.所以我会尝试以下代码,这raSkip意味着跳过当前记录:

procedure TForm1.ClientDataSet1ReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  Action := raSkip;
  ShowMessage('The record with ID = ' + DataSet.FieldByName('ID').AsString +
    ' couldn''t be updated!' + sLineBreak + E.Context);
end;
Run Code Online (Sandbox Code Playgroud)

但请注意,我以前从未尝试过这个,但我不确定是否要忽略ApplyUpdates函数引发的错误还为时不晚.忘记提及,尝试使用传递的参数DataSet,该参数应该包含无法更新的记录; 它可能是确定哪个记录导致问题的方法.

here描述了应用工作流程的更新.