我正在使用Delphi 10.2.3和Firebird 2.5.8。我有一个带有2个字段(标识和文本)的小表,可以在子窗体中进行编辑,并使用主窗体上的数据。在子表单上,我使用DBGrid
和DBNavigator
。每次使用时,我都会创建表格并将其销毁。
在我的子窗体上,每次都可以看到更新的数据。关闭子窗体后,我在主窗体中刷新列表,但是
SELECT Id,Text FROM Tbl_Test
仅显示旧数据。
仅在重新启动程序后才能获取更新的数据。知道我做错了什么吗?顺便说一句。 isql.exe也不会更新数据。我必须重新启动isql。我也测试了Firebird 2.5.6-行为没有差异。
我正在为DBGrid和IBDataBase
使用IBTable
和IBquery
。
当我断开IBDatabase
的连接并重新连接时,我得到了更新的数据。有没有更好的方法?
答案 0 :(得分:3)
您大概有两笔交易,一笔用于填充网格,另一笔用于更改子表单。
然后,网格的事务可能是
这样,该事务拒绝在启动后看到引入的更改。但是,当您重新连接到数据库时,您将隐式回滚该tx并启动另一个新的网格的tx。
如果是这样,您将不得不将网格的tx更改为RC类型(证明它不会破坏表单中的任何其他内容),或者手动重新启动该事务以使其查看较新的数据。