【发布时间】:2019-09-09 19:51:17
【问题描述】:
使用 Delphi 10.2 或 10.3、FireDAC 和 Firebird 2.5 或 3.0:我使用 JVCL TJvAppStorage 组件已有多年,无论是 INI/XML 存储还是 AbsoluteDB 数据库中的表,我都没有遇到过问题.我正在尝试通过 FireDAC 将应用程序从 AbsoluteDB 迁移到 Firebird,但无法让 TJvAppDBStorage 写入条目 - 它不返回任何错误,但实际上没有任何内容写入表中。
我有一个数据模块,其中包含 FireDAC 连接和驱动程序组件、JvAppDBStorage、一个 TDataSource 和一个 TFDTable 组件。 FDB 存在包含适当的表,TFDTable 在该表上打开,JvAppDBStorage 的属性设置为匹配表的字段,并且 TFDTable、数据源和 JvAppDBStorage 正确链接。 (这一切都反映了 AbsoluteDB 的存在和工作。)调用 dmStorage.FBStorage.WriteString(dmStorage.FBStorage.ConcatPaths(['General', 'LastStarted']), FormatDateTime(StdDTFmtStr, Now));不会抛出任何异常,但实际上没有任何内容写入表中。通过 TFDTable 进行正常的追加/设置字段/发布构造可以正常工作。
任何帮助表示赞赏! 史蒂夫
【问题讨论】:
-
Steve,我只是想知道当 TJvAppStorage 执行其工作时,会施加什么事务控制(如果有的话)。如果您还没有看过this article,可以看看它。
-
Martyn,我认为您正在做一些事情 - TJvAppDBStorage 没有明确的事务处理。 Firebird 对交易很挑剔。感谢文章参考;我将进一步深入研究。
-
后续:创建一个新的 TFDTransaction 对象并将其与 TJvAppDBStorage 对象正在使用的 TFDTable 关联消除了该问题。尝试从 TFDConnection 共享默认事务对象是行不通的,它必须是不同的实例。
-
很高兴您找到了解决方案。为什么不将其作为答案发布(可以在 SO 上回答您自己的问题,2 天后您可以“接受”它们),这样未来的读者就会受益