【问题标题】:Handling update errors in multiple records in the TClientDataset's ReconcileError method在 TClientDataset 的 ReconcileError 方法中处理多条记录中的更新错误
【发布时间】:2010-05-12 17:50:17
【问题描述】:

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

例子:

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

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

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

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

** 编辑 **

在调试和转储服务器返回的DataSet记录后,我注意到这个Dataset中有2条记录,第一条是Old记录,第二条是我对第一条记录所做的所有更改。

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

谢谢。

【问题讨论】:

    标签: delphi delphi-2010 tclientdataset midas-server


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 我很困惑,我的DataSet有2条记录,所有新值都在第二条记录中,而不是在字段的NewValue属性中。
      • 我不确定。不过,我想快速测试应该会告诉您;只需修改 CDS 中的几个不同行以包含无效内容,然后 ApplyUpdates 并查看您在 OnReconcileErrorOnUpdateError 中得到什么。
      【解决方案3】:

      在 dbExpress 中你会发现 TSQLConnection 组件,在参数中有一个条目,Mars_Connection,默认设置为 False,设置为 True 错误信息已解决

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-14
        • 1970-01-01
        • 2021-01-18
        • 1970-01-01
        • 2018-12-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多