1

我正在转换用 DBExpress 编写的应用程序以使用新的 FireDAC 组件。打开查询、更改过滤器或排序、在网格中显示等基本操作正常工作。但令我惊讶的是,与 dbexpress 相比,某些函数的行为有所不同,我似乎无法理解。

我的应用程序包含数据库编辑器。当用户打开编辑器时,新事务通过调用方法启动TFDConnection::StartTransaction。当用户点击 OK 按钮时,活动事务被提交并且编辑器关闭。

在编辑器中,我使用两个查询来编辑记录。在第一个查询中,我手动编写 SQL 更新命令(如“ update TEST set NAME='some name' where ID=1234”)并执行它。到目前为止,一切都很好。

第二个查询连接到TDBAdvGrid(相当于TDBGrid来自TMS Software 公司)并且有CachedUpdates = true. 如果我更改该网格中的某些记录,我将调用TFDQuery::Postand TFDQuery::ApplyUpdates

奇怪的调用TFDQuery::ApplyUpdates不仅会提交此特定查询中的待处理更改,还会提交所有连接到TFDConnection. 我认为调用ApplyUpdates应该发出 SQL 更新调用,但不应该干扰事务控制。

我想给用户选项来拒绝他在数据库编辑器窗口中所做的所有更改。如何正确地做到这一点?ApplyUpdates关闭窗口时我应该推迟通话时间吗?那么它的目的是什么TFDQuery::CommitUpdatesTFDConnection::Commit如果只需要调用TFDQuery::ApplyUpdates?

4

1 回答 1

1

将 TFDConnection::TxOptions::StopOptions::xoIfCmdsInactive 设置为 false。这也将禁用 TFDConnection::TxOptions::AutoCommit 选项,应用程序可以自行控制事务。

于 2016-04-19T09:03:44.003 回答