如何使用 Zeos TZConnection 和 TZQuery(在自动提交模式下)始终获取最新数据?
How to get always fresh data with Zeos TZConnection and TZQuery (in AutoCommit mode)?
我有 Delphi 应用程序在全局 DataModule 中以自动提交模式(连接到 Firebird 3.0)使用 TZConnection,这个单一连接服务于应用程序所有数据模块中的所有查询。
但我遇到了问题,查询只看到在连接阶段提交的数据,而查询看不到来自其他应用程序实例或其他应用程序实例的 new/fresh 数据同一应用程序的组件(例如 IBX 数据集)。
TZConnection.Reconnect 解决了这个问题,但我不确定在如此艰难的重新连接期间其他打开的表单发生了什么。
大多数情况下,如果有 TZonnection.CommitRetaining 或 RollbackRetaining 程序(类似于 IBX TIBTransaction 所具有的),那就太好了,但是 TZConnection 没有这样的功能,甚至 TZConnection.Commit 在 AutoCommit 模式下也不起作用(报错Commit is incompatible with AutoCommit mode)
那么 - 使用 TZConnection 获取新数据的最佳实践是什么。我很乐意在打开新 DataModule 或客户请求新报告时在 TZonnection 上执行某些功能。
将 TZConnection TransactionIsolationLevel 属性 设置为 tiReadCommitted 并将 AutoCommit 设置为 true 可以解决问题。
我有 Delphi 应用程序在全局 DataModule 中以自动提交模式(连接到 Firebird 3.0)使用 TZConnection,这个单一连接服务于应用程序所有数据模块中的所有查询。
但我遇到了问题,查询只看到在连接阶段提交的数据,而查询看不到来自其他应用程序实例或其他应用程序实例的 new/fresh 数据同一应用程序的组件(例如 IBX 数据集)。
TZConnection.Reconnect 解决了这个问题,但我不确定在如此艰难的重新连接期间其他打开的表单发生了什么。
大多数情况下,如果有 TZonnection.CommitRetaining 或 RollbackRetaining 程序(类似于 IBX TIBTransaction 所具有的),那就太好了,但是 TZConnection 没有这样的功能,甚至 TZConnection.Commit 在 AutoCommit 模式下也不起作用(报错Commit is incompatible with AutoCommit mode)
那么 - 使用 TZConnection 获取新数据的最佳实践是什么。我很乐意在打开新 DataModule 或客户请求新报告时在 TZonnection 上执行某些功能。
将 TZConnection TransactionIsolationLevel 属性 设置为 tiReadCommitted 并将 AutoCommit 设置为 true 可以解决问题。