Delphi - 在DataModule上打开查询使AutoCommit无效? 10.2 Toyko的奇怪错误

时间:2017-10-05 08:01:05

标签: delphi delphi-xe8 firedac autocommit delphi-10.2-tokyo

我有一个带有FDQuery的数据模块,所有都设置了它应该如何,我在数据模块的'OnCreate'事件中打开它。此数据模块以另一种形式链接,其中包含其他查询,数据集,表格和导航器。

我曾经使用Delphi XE8,一切正常。

现在我正在使用Delphi 10.2 tokyo,挣扎于一个奇怪的bug:
(我声明用于所有查询和DataSet的FDConnection是相同的,并且AutoCommit属性设置为True)

  • 假设我在表单上的DataSet中编辑一个字段并发布它。连接提交它,我可以在DB中看到这个修改。
  • 现在我创建了一个DataModule实例,因此它创建了查询并打开
  • 如果我再次尝试编辑该DataSet并将其发布,则不会发生任何提交,并且数据库中不存在修改,仅保留在此事务中。

最近我发现只有在'OnCreate'事件中打开查询并保持打开时才会发生这种情况。如果我在打开之后立即关闭它,一切正常。如果我在创建DataModule实例后打开它,一切正常。

如何解决此问题,将查询的开头留在OnCreate事件中?

注意:AutoCommit属性始终为True,使用Delphi XE8进行编译将使所有工作正常。
NB2:试图覆盖DataModule的create事件以在那里打开查询。相同的结果。

更新:如果我将Query.FetchOptions.Mode设置为'fmAll'就行了。

Update2:发现当数据模块打开查询时它没有提交,连接的属性InTransaction变为 True ,否则设置为 False

有人知道这是什么问题吗?

2 个答案:

答案 0 :(得分:0)

这似乎是一些人的错误,所以我报告了它。如果您可以使用示例程序来重现它,或者发现任何导致(或解决)该问题的原因,请完成此https://quality.embarcadero.com/browse/RSP-21411

该问题刚刚由Embarcadero作为“已解决”解决。将来的修补程序中可能会出现。

答案 1 :(得分:-1)

在Oracle DB上,Delphi v10.2面临着完全相同的问题。 有趣的是,我在所有测试环境中都没有看到这种行为。

我正在使用FDMonitor来获取有关事务处理过程的详细信息,并且我可以在日志中看到,在无法立即提交事务的环境中,查询中有一个'ACommit'值,该值设置为False,而在可以正常工作的环境中设置为True。 这很奇怪。 我的应用程序的旧版本是在10.2之前的版本中使用delphi编译的。

此致