繁体   English   中英

FireDAC ApplyUpdates和事务控制

[英]FireDAC ApplyUpdates and transaction control

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

我的应用包含数据库编辑器 当用户打开编辑器时,通过调用方法TFDConnection::StartTransaction启动新事务。 当用户单击“确定”按钮时,将提交活动事务并关闭编辑器。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM