【问题标题】:Firedac fetches oudated values within a few seconds after updateFiredac 在更新后的几秒钟内获取过时的值
【发布时间】:2015-03-20 20:29:29
【问题描述】:

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

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

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

非常感谢

【问题讨论】:

    标签: delphi connection-pooling firedac


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-28
      • 2019-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多