2

我正在尝试使用 ReconcileError 事件来允许用户在特定记录中发生更新错误后更正数据。

例子:

我有一个包含一个字段和 3 条记录的数据集,该字段对数据库有一个唯一约束,然后当它到达数据库时我将一个值更改为冲突,然后我在数据集上调用 ApplyUpdates。

这将在提供程序中生成错误(违反唯一约束)并中止 applyupdates 过程,并在 ReconcileError 方法的 Action var 中返回 raAbort。

在我尝试使用的 ReconcileError 方法中:

Action := HandleReconcileError(aDataSet, UpdateKind, E); 

** 编辑 **

在调试和转储服务器返回的数据集记录后,我注意到这个数据集中有两条记录,第一条是旧记录,第二条是我对第一条记录所做的所有更改。

我有点困惑,我总是会得到这个带有 2 条记录的 DataSet 吗?我认为它应该只有一个旧/新值的记录。

谢谢。

4

3 回答 3

3

经过一番调试和阅读,我发现了以下内容:

  • 为每个无法应用的记录调用 OnReconcileError,并为每个记录创建一个数据集。
  • 当UpdateKind为ukModify时,这个DataSet有2条记录,一条记录为usUnModified(原始记录),第二条记录为usModified(所有修改都在这第二条记录中)
  • 当更改为 ukInsert 或 ukDelete 时,DataSet 只有一条记录
  • 此 DataSet 不应更改,因为这只是创建的临时数据集,因此您可以读取数据
  • 协调对话框没有按预期工作,因为它从不显示修改记录的正确值(Delphi 2010 错误?)
于 2010-05-13T12:47:16.980 回答
1

传递给 OnReconcileError 或 OnUpdateError 的记录是无法应用更新的记录。根据D2007 帮助文件(注意这是帮助文件链接,而不是 Web 链接!) - 请注意有关 DataSet 参数的部分:

您应该始终编写 OnReconcileError 或 OnUpdateError 事件处理程序,即使只是丢弃无法应用的返回记录。这两个事件的事件处理程序以相同的方式工作。它们包括以下参数:

DataSet:包含无法应用的更新记录的客户端数据集。您可以使用此数据集的方法来获取有关问题记录的信息并编辑记录以更正任何问题。特别是,您需要使用当前记录中字段的 CurValue、OldValue 和 NewValue 属性来确定更新问题的原因。但是,您不得调用任何更改事件处理程序中当前记录的客户端数据集方法。

于 2010-05-12T19:18:27.833 回答
1

在 dbExpress 中,您会发现 TSQLConnection 组件,在参数中的条目 Mars_Connection ,默认设置为False ,将其设置为True并解决错误消息

于 2013-06-19T23:08:19.243 回答