Firedac 在更新后几秒钟内获取过时的值

Firedac fetches oudated values within a few seconds after update

我目前正在维护一个客户端/服务器(通过 TCP)系统。服务器可以被多个客户端访问(最多几十个),所以我设置了一个连接池,就像 FireDAC 允许我们做的那样。 在大多数情况下它工作得很好。我还有一个问题:

当我的一个客户端应用程序调用一个 "writing" 函数(注意:一个暗示写入数据库的函数),然后在同一资源上调用一个读取函数后,它立即得到过时的值(上次更新前的值)。 这个结果持续了几seconds/hundreds毫秒,然后返回结果很好,好像这个过程在驱动层没有完全结束。 使用 INSERT 查询观察到相同的行为。

奇怪的是,我用来更新数据库的 TFDQuery(通过它的 .Post 函数)return 非常快,就好像该过程已经结束一样。我没有使用 amNonBlocking 参数,而是使用默认值 (amBlocking)。 我认为自然行为是 .Post 函数仅在数据已完全更新但显然没有更新时 return 起作用。那是 FireDac 的问题吗?那是喷气发动机问题吗? 使用 RecordLocking 是可行的方法吗?我认为这是有风险的,因为我需要在包括 MS-ACCESS 在内的 4 个 DBMS 上保持相同的行为。 我目前正在使用 Delphi XE6 和 MS-ACCESS 数据库,但我的应用程序需要能够 运行 在 Oracle、MS SQL 和 Postgre[=25= 上] 也是。

非常感谢

如果有人在搜索这个答案,那实际上是由于 MS ACCESS 在正确处理并发方面存在问题(特别是在写作上下文中)。我们在标准 RDBMS(Oracle、MS SQL Server、PostgreSQL)上没有看到这种行为的证据。

我们别无选择,只能放弃对该特定功能的访问支持。