【发布时间】:2020-04-21 20:54:07
【问题描述】:
我在 Delphi 5 上使用 BDE 开发和应用程序,但在更新到 Delphi XE 10 之前从未得到任何回收。我将数据引擎从 BDE 更改为 Firedac。程序是简单的 POS 应用程序制作发票,带有项目表主详细信息的发票表。有时会遗漏一些不具体的发票,但每 1000 张大约有 11 张。
我开始寻找、检查和更改,我添加了事务组件.. 稍后测试相同的结果添加 SchemaAdapter 相同的结果直到我找出问题所在
如果数据服务器同时运行一条语句,在同一张表上运行另一个客户端的不同语句,你可以在 FireDac 上发现一个大错误,即第二个客户端会出现数据已保存但实际上什么也没有保存了
否则在 BDE 上的相同场景结果完全不同第二个客户端引发错误消息“Dead ... SQL”至少知道数据未保存
希望也能进行一些测试,繁重的 SQL 语句在服务器上运行它并尝试在 CachUpdate 中的表上插入 -> 和 applyUpdate 并会看到结果
以上都使用Interbase数据库
【问题讨论】:
-
抱歉,要获得这方面的帮助,您需要显示您正在使用的代码,最好在您的 q 中添加 minimal, reproducible example。如果没有看到你在做什么,读者就无法明智地评论可能出了什么问题。您不太可能在 FireDAC 中发现错误,因为它 + Interbase 应该比基于 BDE 的应用程序更健壮;更有可能是代码中的错误。
-
顺便说一句,IIRC,BDE 时代对缓存更新感兴趣的主要原因是难以从服务器获取可更新的结果集。这个问题早已被 DB-access 库绕过,这些库使用只读 Sql 查询检索数据并自动生成 UPDATE 语句以更新服务器上的数据,例如TClientDataSet+TDataSetProvider 和 FireDAC。因此,您可能会发现您不需要将缓存更新与 FireDAC 一起使用。