【发布时间】:2021-01-14 01:41:09
【问题描述】:
是否可以在缓存更新模式下在 FireDAC 查询上调用 Applyupdates 而无需清除其 Delta?
这样做的原因是因为我有 4 个 FDQuery,我想一起保存或在其中任何一个出错时一起取消。如果发生任何问题,我可以使用单个事务来回滚所有更改,但这会使每个应用更新成功的 FDQuery 的 Delta 为空。
所以我想调用某种不会清除 Delta 的 ApplyUpdates,并且只有当所有 FDQuery ApplyUpdates 都成功时,我才会提交事务并在每个 FDQuery 上调用 CommitUpdates 以清除它们的 Delta。但是如果其中一个失败,每个 FDQuery 的更改仍将保留在它们的 Delta 中,因此我回滚事务,用户仍然可以修复数据并尝试再次保存它们。
更新:正如@Brian 所评论的,将属性 UpdateOptions.AutoCommitUpdates 设置为 False 可以解决问题并且不会清除 Delta。
【问题讨论】:
-
看起来将 AutoCommitUpdates 设置为 false 可以实现这一点。文档有点难以阅读 - 但它看起来像清除 delta = 提交对 TFDCustomMemTable 后代的更改。看起来是正确的,因为另一个主题说调用 CommitUpdates 来清除数据集更改日志。
-
您是否尝试过将
TFDSchemaAdapter用于Centralized Cached Updates? -
是的,谢谢@PeterWolf。它非常适用于主从关系,但在这种情况下它们是不相关的。
-
是的,文档中的示例演示了主从场景中的用法,但我认为
TFDSchemaAdapter可以用作单个点来应用来自多个不相关数据集的更新。
标签: delphi firedac delphi-10.4-sydney