Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi ClientDataSet:是否自动应用已对账的增量?_Delphi_Delphi Xe4_Tclientdataset - Fatal编程技术网

Delphi ClientDataSet:是否自动应用已对账的增量?

Delphi ClientDataSet:是否自动应用已对账的增量?,delphi,delphi-xe4,tclientdataset,Delphi,Delphi Xe4,Tclientdataset,在ClientDataSet的onReconcienceError事件中,您可以将其告知raMerge,这将保存对增量的更改,以便在无错误的情况下进行另一次应用更新。是否有方法告诉数据集立即在onreconcieError事件中应用增量?我只能想出一些复杂的方法来检查在AfterApplyUpdates事件中是否协调了错误。因此我确实有用于应用更新的集中代码,我最终意识到这可能是检查用户是否请求合并的最佳位置。我可能仍然需要清理一下这个问题,但对于其他遇到这个问题的人来说,这可能是一个解决方案

在ClientDataSet的
onReconcienceError
事件中,您可以将其告知
raMerge
,这将保存对增量的更改,以便在无错误的情况下进行另一次应用更新。是否有方法告诉数据集立即在
onreconcieError
事件中应用增量?我只能想出一些复杂的方法来检查在
AfterApplyUpdates
事件中是否协调了错误。

因此我确实有用于应用更新的集中代码,我最终意识到这可能是检查用户是否请求合并的最佳位置。我可能仍然需要清理一下这个问题,但对于其他遇到这个问题的人来说,这可能是一个解决方案

if(cds.ChangeCount > 0)then
begin
  fIsMerged := false;
  errors := cds.ApplyUpdates(0);
  if(errors = 0)then
  begin
    cds.Refresh;
  end
  //If there is a conflict, the user might try to merge.  
  //If they do, we need to reapply the update.
  else if(fIsMerged)then
  begin
    errors := cds.ApplyUpdates(0);
    if(errors = 0)then
    begin
      cds.Refresh;
    end;
  end;
end;
fIsMerged
是一个类变量,我在on协调处理程序中设置了它

  Action := HandleReconcileError(DataSet, UpdateKind, E);
  if(Action = raMerge)then
  begin
    fIsMerged := true;
  end;

我尝试了在OnReconcienceError事件中修改记录的简单方法,但在CD上调用.Post只会导致“操作不适用”异常。您是否已经在OnReconciderRor中使用了RecError表单(来自对象存储库)?无论如何,通过在CD上设置一些自定义约束,可能会更容易避免在一开始就出现协调错误。我对它进行了调整,只允许合并或刷新。刷新很好,但是合并只做了我需要的一半。好吧,我想你最好给读者解释一下“另一半”是什么。如果我对您的理解是正确的,那么最困难的一点就是(在没有人工帮助的情况下)在OnReconficationError中确定需要对修改后的记录进行哪些更改以克服对账错误。如果你能做到的话。我原以为在以后调用ApplyUpdate时执行更改相对来说比较简单。另一半是应用存储的增量。前一半是用户决定保留他们的更改。这是一个多用户应用程序。在极少数情况下,两个用户可能对同一字段进行编辑。当该用户单击“保存”时,将获取冲突表单并选择保留其更改或其他用户更改。现在我需要知道如何在不再次单击save的情况下存储这些信息。根据cary Jensen的书,设置Action:=raCorrect的目的是“尝试再次更新记录”。类似的操作:=raSkip是“忽略错误并将修改后的记录保留在更改缓存中”。可以从ReconciderError处理程序中递归调用ApplyUpdate。试试看。