我目前正在维护客户端/服务器(通过TCP)系统。多个客户端(最多几十个)可以访问服务器,所以我设置了像FireDAC这样的连接池,允许我们这样做。 在大多数情况下,它工作得很好。我还有一个问题:
当我的一个客户端应用程序调用"写" function(nb:一个意味着写入数据库的函数)然后在同一个ressource上调用读取函数后立即获得过时的值(上一次更新之前的值)。 这个结果持续几秒/几百毫秒,然后结果恢复良好,好像该过程在驱动程序层上没有完全结束。 使用INSERT查询时会发现相同的行为。
奇怪的是,用于更新数据库(通过它的.Post函数)的TFDQuery很快就会返回,就像进程结束一样。我没有使用amNonBlocking参数,而是使用默认值(amBlocking)。 我认为自然行为是.Post函数仅在数据完全更新时才返回,但显然不是。那是FireDac问题吗?是Jet引擎问题? 正在使用RecordLocking的方式去?我认为这有风险,因为我需要在4个DBMS上保持相同的行为,包括MS-ACCESS。 我目前正在使用带有MS-ACCESS数据库的Delphi XE6,但我的应用程序也需要能够在Oracle,MS SQL和PostgreSQL上运行。
非常感谢
答案 0 :(得分:0)
如果有人正在寻找这个答案,那实际上是由于MS ACCESS问题处理正确的并发(特别是在写作环境中)。我们在标准RDBMS(Oracle,MS SQL Server,PostgreSQL)上没有看到这种行为的证据。
我们别无选择,只能放弃对此特定功能的访问支持。