Transactions FireDAC应用程序更新和事务控制

Transactions FireDAC应用程序更新和事务控制,transactions,firebird2.5,firedac,dbexpress,c++builder-xe7,Transactions,Firebird2.5,Firedac,Dbexpress,C++builder Xe7,我正在将用DBExpress编写的应用程序转换为使用新的FireDAC组件。打开查询、更改过滤器或排序、在网格中显示等基本操作都正常工作。但是,与dbexpress相比,有些函数的行为有所不同,我对此感到惊讶,我似乎无法理解 我的应用程序包含数据库编辑器。当用户打开新编辑器时 事务是通过调用方法TFDConnection::StartTransaction启动的。当用户单击OK按钮时,活动事务被提交,编辑器关闭 在编辑器中,我使用两个查询来编辑记录。在第一个查询中,我手动编写SQL更新命令(如“

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

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

在编辑器中,我使用两个查询来编辑记录。在第一个查询中,我手动编写SQL更新命令(如“
updatetestset NAME='some NAME',其中ID=1234
”)并执行它。到目前为止还不错

第二个查询连接到
TDBAdvGrid
(相当于TMS软件公司提供的
TDBGrid
),并且具有
CachedUpdates=true
。如果我更改了该网格中的一些记录,我将调用
TFDQuery::Post
TFDQuery::ApplyUpdates

调用
TFDQuery::applyUpdate
不仅提交此特定查询中挂起的更改,而且提交连接到
TFDConnection
实例的所有查询。我认为调用
applyUpdate
应该发出SQL更新调用,但不应该干扰事务控制


我想让用户在数据库编辑器窗口中选择拒绝他所做的所有更改。如何正确地做?关闭窗口时,我是否应该将调用
ApplyUpdate
的时间推迟到时间?如果只需要调用
TFDQuery::applyUpdate
,那么
TFDQuery::CommitUpdates
TFDConnection::Commit
的目的是什么?

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