我在 Delphi 2009 (Firebird 3.0) 中有 TIBQuery-TDataSetProvider-TClientDataSet 链,我执行 MyClientDataSet.ApplyUpdates(0)。在调用 ApplyUpdates(0) 之前,我是否需要在此 CDS 上调用 CheckBrowseMode 或 Post。我几乎可以肯定我需要调用 Post/CheckBrowseMode,并且我认为未发布的更新不会应用于 IBQuery,我没有支持/反对这种想法的文档,但这样想是合乎逻辑的。但有时我可以观察到 MyClientDataSet 在 ApplyUpdates(0) 之前处于 [dsInsert, dsEdit] 状态,并且新值仍被发布并保存在查询中。但也有证据和理由反对这一点。所以 - 我很困惑。
当然,对于 TIBQuery,我不使用 CachedUpdated(因为有 CDS),这不是关于提交事务的问题,我强烈控制它们并且排除了该问题。
我进行了测试:我放入raise Exception
了 MyClientDataSet 的 BeforePost 事件,MadException 给出了跟踪:
TMyDM.MyClientDataSetBeforePost
TDataSet.DoBeforePost
TDataSet.Post
TCustomClientDataSet.Post
TDataSet.CheckBrowseMode
TCustomClientDataSet.ApplyUpdates
因此,有经验证据表明 CheckBroseMode 是自动调用的,但它是偶然的(例如,由于 DataSetProvider 或 ClientDataSet 的某些特殊配置)还是我可以在文档中找到的规则?