FireDAC ApplyUpdates 不清除 Delta
FireDAC ApplyUpdates without clearing the Delta
是否可以在缓存更新模式下对 FireDAC 查询调用 Applyupdates 而无需清除其增量?
这样做的原因是因为我有 4 个 FDQuery,我想将它们一起保存或一起取消(如果其中任何一个出现错误)。如果出现任何问题,我可以使用单个事务来回滚所有更改,但是对于 ApplyUpdates 成功的每个 FDQuery,这会使 Delta 留空。
所以我想调用某种不清除 Delta 的 ApplyUpdates,只有当所有 FDQuerys ApplyUpdates 都成功时,我才会提交事务并在每个 FDQuery 上调用 CommitUpdates 以清除它们的 Deltas。但是,如果其中一个失败,每个 FDQuery 的更改仍将保留在它们的增量中,因此我回滚事务,用户仍然可以修复数据并尝试再次保存它们。
更新:正如@Brian 评论的那样,将 属性 UpdateOptions.AutoCommitUpdates 设置为 False 可以解决问题并且不会清除 Delta。
将 UpdateOptions.AutoCommitUpdates
设置为 false 将在调用 ApplyUpdates 时保留增量。然而,当前缺少 AutoCommitUpdates 帮助,并且以令人困惑的方式错误地描述了 False 设置。它应该更像是:
AutoCommitUpdates controls the automatic committing of cached updates.
Specifies whether the automatic committing of updates is enabled or
disabled.
- If AutoCommitUpdates is True, then all the successfully updated records applied by the call to ApplyUpdates are automatically marked as unchanged. You do not need to explicitly call CommitUpdates.
- If AutoCommitUpdates is False, then your application must explicitly call CommitUpdates to mark all changed records as unchanged.
我提交了修复帮助的工单:RSP-31141
是否可以在缓存更新模式下对 FireDAC 查询调用 Applyupdates 而无需清除其增量?
这样做的原因是因为我有 4 个 FDQuery,我想将它们一起保存或一起取消(如果其中任何一个出现错误)。如果出现任何问题,我可以使用单个事务来回滚所有更改,但是对于 ApplyUpdates 成功的每个 FDQuery,这会使 Delta 留空。
所以我想调用某种不清除 Delta 的 ApplyUpdates,只有当所有 FDQuerys ApplyUpdates 都成功时,我才会提交事务并在每个 FDQuery 上调用 CommitUpdates 以清除它们的 Deltas。但是,如果其中一个失败,每个 FDQuery 的更改仍将保留在它们的增量中,因此我回滚事务,用户仍然可以修复数据并尝试再次保存它们。
更新:正如@Brian 评论的那样,将 属性 UpdateOptions.AutoCommitUpdates 设置为 False 可以解决问题并且不会清除 Delta。
将 UpdateOptions.AutoCommitUpdates
设置为 false 将在调用 ApplyUpdates 时保留增量。然而,当前缺少 AutoCommitUpdates 帮助,并且以令人困惑的方式错误地描述了 False 设置。它应该更像是:
AutoCommitUpdates controls the automatic committing of cached updates.
Specifies whether the automatic committing of updates is enabled or disabled.
- If AutoCommitUpdates is True, then all the successfully updated records applied by the call to ApplyUpdates are automatically marked as unchanged. You do not need to explicitly call CommitUpdates.
- If AutoCommitUpdates is False, then your application must explicitly call CommitUpdates to mark all changed records as unchanged.
我提交了修复帮助的工单:RSP-31141