我正在转换用 DBExpress 编写的应用程序以使用新的 FireDAC 组件。打开查询、更改过滤器或排序、在网格中显示等基本操作正常工作。但令我惊讶的是,与 dbexpress 相比,某些函数的行为有所不同,我似乎无法理解。
我的应用程序包含数据库编辑器。当用户打开编辑器时,新事务通过调用方法启动TFDConnection::StartTransaction
。当用户点击 OK 按钮时,活动事务被提交并且编辑器关闭。
在编辑器中,我使用两个查询来编辑记录。在第一个查询中,我手动编写 SQL 更新命令(如“ update TEST set NAME='some name' where ID=1234
”)并执行它。到目前为止,一切都很好。
第二个查询连接到TDBAdvGrid
(相当于TDBGrid
来自TMS Software 公司)并且有CachedUpdates = true
. 如果我更改该网格中的某些记录,我将调用TFDQuery::Post
and TFDQuery::ApplyUpdates
。
奇怪的调用TFDQuery::ApplyUpdates
不仅会提交此特定查询中的待处理更改,还会提交所有连接到TFDConnection
. 我认为调用ApplyUpdates
应该发出 SQL 更新调用,但不应该干扰事务控制。
我想给用户选项来拒绝他在数据库编辑器窗口中所做的所有更改。如何正确地做到这一点?ApplyUpdates
关闭窗口时我应该推迟通话时间吗?那么它的目的是什么TFDQuery::CommitUpdates
?TFDConnection::Commit
如果只需要调用TFDQuery::ApplyUpdates
?