处理TClientDataset的ReconcileError方法中的多个记录中的更新错误

时间:2010-05-12 17:50:18

标签: delphi delphi-2010 tclientdataset midas-server

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

示例:

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

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

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

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

**编辑**

在调试并转储从服务器返回的DataSet记录之后,我注意到此数据集中有2条记录,第一条是旧记录,第二条记录是我对第一条记录所做的所有更改。

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

感谢。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

在dbExpress中你可以找到TSQLConnection组件,在参数中输入一个条目 Mars_Connection ,默认设置为 False ,将其设置为 True < / strong>并且错误消息已解决

答案 2 :(得分:0)

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

  

你应该总是编码   OnReconcileError或OnUpdateError   事件处理程序,即使只是丢弃   返回的记录不可能   应用。这些事件处理程序   两个事件的工作方式相同。他们   包括以下参数:

     

DataSet:一个客户端数据集   包含更新的记录   无法应用。你可以用它   数据集获取信息的方法   关于问题记录和编辑   该记录,以纠正任何   问题。特别是,你会想要的   使用CurValue,OldValue和   中的字段的NewValue属性   目前的记录来确定   更新问题的原因。然而,   您不能调用任何客户端数据集   更改当前记录的方法   在你的事件处理程序中。