在重新启动应用程序或数据库连接之前,不会更新DBGrid数据

时间:2018-07-11 14:44:19

标签: sql delphi firebird

我正在使用Delphi 10.2.3和Firebird 2.5.8。我有一个带有2个字段(标识和文本)的小表,可以在子窗体中进行编辑,并使用主窗体上的数据。在子表单上,我使用DBGridDBNavigator。每次使用时,我都会创建表格并将其销毁。

在我的子窗体上,每次都可以看到更新的数据。关闭子窗体后,我在主窗体中刷新列表,但是

SELECT Id,Text FROM Tbl_Test 

仅显示旧数据。

仅在重新启动程序后才能获取更新的数据。知道我做错了什么吗?顺便说一句。 isql.exe也不会更新数据。我必须重新启动isql。我也测试了Firebird 2.5.6-行为没有差异。

我正在为DBGrid和IBDataBase使用IBTableIBquery

当我断开IBDatabase的连接并重新连接时,我得到了更新的数据。有没有更好的方法?

1 个答案:

答案 0 :(得分:3)

您大概有两笔交易,一笔用于填充网格,另一笔用于更改子表单。

然后,网格的事务可能是

  • 设置为SNAPSHOT类型,而不是READ COMMITTED类型
  • 在子表单的tx“提交”更改数据后没有重新启动

这样,该事务拒绝在启动后看到引入的更改。但是,当您重新连接到数据库时,您将隐式回滚该tx并启动另一个新的网格的tx。

如果是这样,您将不得不将网格的tx更改为RC类型(证明它不会破坏表单中的任何其他内容),或者手动重新启动该事务以使其查看较新的数据。