mysql - 通过 FireDac 和 MySql 的主/详细数据快照 ¿为什么在一个客户端中写入详细记录的数据在第二个客户端中看不到?

标签 mysql delphi master-detail datasnap firedac

我有一个DataSnap Server有两个TFDQuery's通过TFDConnectionMySQL数据库。 此查询位于 master/detail relationship 中通过 TDataSource (所需的数据集)。该数据通过 TDataSetProvider 导出。

在客户端,我有一个 TDataModule与一个TSQLConnection , 一 TDSProviderConnection和两个TClientDataSet's ,其中一个为Master另一个为Neested Detail通过DataSetField属性。

当我测试我的客户端时,一切正常。

问题是当two clients时正在工作simultaneously相同的详细信息记录上,我写入一个客户端中的一个详细信息的数据在我的第二个客户端中看不到,反之亦然。

假设我们有一个简单的账单/项目关系的场景: 账单 1、项目 1、原始数据

如果我在两个客户端中读取Bill1,则两者都会读取相同的数据。 如果我在第一个客户端中将 OriginalData 修改为 ModifiedData,并执行 ApplyUpdates ,它工作正常,但随后我在第二个客户端中刷新相同的Bill1,并且仍然读取未更改的OriginalData

如果我将数据写入 MasterTable一切正常,用我的DetailTable购买它似乎从某些缓存或其他东西获取数据。我通过 BDE 复制了所有内容组件和Paradox数据库并没有问题,但是我们需要使用FireDacMySQL

所以,问题是... ¿为什么在使用 DataSnap 调用刷新后,我的第二个客户端看不到写入第一个客户端中的详细记录的数据。通过FireDacMySql

我正在使用 Delphi Xe5 update 2。

注意:Master/Detailparametrized Query ,因此一次只有一个 Bill 处于事件状态。

再次为我糟糕的英语感到抱歉。

最佳答案

通过在服务器端设置TFDConnectionFetchOptions.DetailOptimize=FALSE解决了这个问题。

当 DetailOptimize 为 true 时(FireDac 上的默认值),仅当当前详细数据集关键字段值与主数据集关键字段值不同时,FireDac 才会刷新详细数据集。

欲了解更多信息,请阅读 FireDAC.Stan.Option.TFDFetchOptions.DetailOptimize

关于mysql - 通过 FireDac 和 MySql 的主/详细数据快照 ¿为什么在一个客户端中写入详细记录的数据在第二个客户端中看不到?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24376846/

相关文章:

c# - 连接远程mysql数据库,报错 "Unable to connect to any of the specified MySQL hosts"

php - 如何显示 Blob 数据的缩略图

delphi - Delphi历史记录-源代码控制

delphi - Indy:TidMessage 删除所有重音,如何禁用它?

java - 将字符串资源添加到主/详细模板的详细信息部分

mysql - 如何为具有三个主表的同一个子表添加三个外键?

mysql - Wordpress 使用自定义查询搜索序列化元数据

mysql - 转换为 utf8mb4_unicode_ci 时出错

delphi - 如何定义其参数在后代类中不同的虚函数?

mysql - 我有主从表,我想复制它们