【发布时间】:2018-03-05 17:08:00
【问题描述】:
目前我们正在将 Delphi7 应用程序的数据库组件从 BDE 组件迁移到 AnyDAC (FireDAC) 版本 8.0.5 组件。
给出以下先决条件:
- 在我们的表单上,我们有一个 TADConnection、一个 TADQuery 和一个 TADTable。 TADQuery 是 TADTable 的 MasterSource。没有对 AnyDAC 组件的设置进行特殊更改,因此 AutoCommit 模式处于活动状态。
- 此外,我们的表单上有一个 TDBMemo,它链接到 TADTable 的 ftMemo 字段(Firebird FieldType = Blob / Size = 240 / Subtype = Text)
在加载 blob 文本字段内容 (TBlobField.GetAsString) 期间,TADTable 会自动启动一个事务不会提交。
这种行为正常吗?我们是否有可能避免这种公开交易? 请注意,目前无法停用 AutoCommit。
任何帮助表示赞赏。
【问题讨论】:
-
是的,这很正常。只要您不与详细元组一起获取 BLOB 数据,AnyDAC (FireDAC) 就会启动一个隐式事务。把它想象成每次从 DBMS 读取或写入 DBMS 都会发出事务。
-
@Victoria:如果知道他们在说什么的人(例如您)可以编辑
anydactag 以提及它现在是 FireDAC,那将是很好的,因为无论什么版本的 Delphi 引入了它.. -
@MartynA,它已经存在了“2013 年 AnyDAC 被出售给 Embarcadero,更名为 FireDAC,仅限于支持 Delphi 平台。”
-
@Victoria:哦,我错过了——我只是在查看标签的悬停提示。谢谢。
-
@Victoria:谢谢你的提示!这正是自动启动交易的原因!我可以再问你一个问题... 是否有可能检查交易的一部分?我的意思是我可以在 starttransaction 和 commit/rollback 之间检查准备好的 sql 命令吗?
标签: delphi transactions firedac autocommit anydac