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



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

当我的一个客户端应用程序调用"写入"函数(nb:一个意味着写入数据库的函数),然后在调用同一资源上的读取函数后立即,它会得到过时的值(上次更新之前的值)。这个结果持续几秒钟/数百毫秒,然后结果很好,就好像这个过程在驱动程序层上没有完全结束一样。在 INSERT 查询中观察到相同的行为。

奇怪的是,我用来更新数据库的TFDQuery(通过它.后功能)返回得很快,就好像该过程已经结束一样。我没有使用 amNonBlock 参数,而是使用默认值(amBlocking)。我认为自然行为是.Post函数仅在数据完全更新时返回,但显然没有。这是FireDac的问题吗?这是喷气发动机问题吗?使用记录锁定是要走的路吗?我相信这是有风险的,因为我需要在包括 MS-ACCESS 在内的 4 个 DBMS 上保持相同的行为。我目前正在使用带有MS-ACCESS数据库的Delphi XE6,但我的应用程序也需要能够在Oracle,MS SQL和PostgreSQL上运行。

谢谢

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

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

最新更新