我有DataSnap Server
个TFDQuery's
来自TFDConnection
到MySQL
数据库。
此查询通过master/detail relationship
(嵌套数据集)位于TDataSource
中。此数据通过一个TDataSetProvider
导出。
在客户端,我有一个TDataModule
,其中一个TSQLConnection
,一个TDSProviderConnection
和两个TClientDataSet's
,一个用于Master
,另一个用于Neested Detail
DataSetField
通过two clients
属性。
当我测试我的客户端时,一切正常。
问题是当simultaneously
对{strong>相同的详细记录工作ApplyUpdates
时,我从第二个客户端看不到我写入一个客户端中的一个详细信息的数据,反之亦然。
假设我们有一个简单的bill / items关系的场景: Bill1,Item1,OriginalData
如果我在两个客户端中读取 Bill1 ,则两者都读取相同的数据。
如果我在我的第一个客户端中将 OriginalData 修改为 ModifiedData ,并执行MasterTable
,它可以正常工作,但我刷新我的第二个客户端中的 Bill1 相同,并且仍在读取未更改的 OriginalData
如果我将数据写入DetailTable
一切正常,请使用我的BDE
购买它似乎从某些缓存中获取数据。我通过Paradox
组件和FireDac
数据库重现所有内容并且没有任何问题,但我们需要使用MySQL
和DataSnap
所以,问题是......¿为什么在通过FireDac
和{{1}调用MySql
刷新后,我的第二个客户端看不到第一个客户端中写入详细记录的数据}}?
我正在使用Delphi Xe5更新2。
注意:Master/Detail
是parametrized Query
,因此一次只能激活一个帐单。
再一次,抱歉我的英语很差。
答案 0 :(得分:0)
通过设置服务器端FetchOptions.DetailOptimize=FALSE
的 TFDConnection
来解决此问题。
当DetailOptimize为true时(默认情况下为FireDac)FireDac仅在当前详细数据集键字段值与主数据集键字段值不同时刷新详细数据集。