我有一个DataSnap Server
有两个TFDQuery's
通过TFDConnection
到 MySQL
数据库。
此查询位于 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
数据库并没有问题,但是我们需要使用FireDac
和MySQL
所以,问题是... ¿为什么在使用 DataSnap
调用刷新后,我的第二个客户端看不到写入第一个客户端中的详细记录的数据。通过FireDac
和MySql
?
我正在使用 Delphi Xe5 update 2。
注意:Master/Detail
是 parametrized Query
,因此一次只有一个 Bill 处于事件状态。
再次为我糟糕的英语感到抱歉。
最佳答案
通过在服务器端设置TFDConnection
的FetchOptions.DetailOptimize=FALSE
解决了这个问题。
当 DetailOptimize 为 true 时(FireDac 上的默认值),仅当当前详细数据集关键字段值与主数据集关键字段值不同时,FireDac 才会刷新详细数据集。
欲了解更多信息,请阅读 FireDAC.Stan.Option.TFDFetchOptions.DetailOptimize
关于mysql - 通过 FireDac 和 MySql 的主/详细数据快照 ¿为什么在一个客户端中写入详细记录的数据在第二个客户端中看不到?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24376846/