【发布时间】: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