通过FireDac和MySql掌握/详细DataSnap为什么从第二个客户端看不到写入一个客户端的详细记录的数据?

时间:2014-06-24 01:03:44

标签: mysql delphi master-detail datasnap firedac

我有DataSnap ServerTFDQuery's来自TFDConnectionMySQL数据库。 此查询通过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数据库重现所有内容并且没有任何问题,但我们需要使用MySQLDataSnap

所以,问题是......¿为什么在通过FireDac和{{1}调用MySql刷新后,我的第二个客户端看不到第一个客户端中写入详细记录的数据}}?

我正在使用Delphi Xe5更新2。

注意:Master/Detailparametrized Query,因此一次只能激活一个帐单。

再一次,抱歉我的英语很差。

1 个答案:

答案 0 :(得分:0)

通过设置服务器端FetchOptions.DetailOptimize=FALSE TFDConnection 来解决此问题。

当DetailOptimize为true时(默认情况下为FireDac)FireDac仅在当前详细数据集键字段值与主数据集键字段值不同时刷新详细数据集。

了解更多信息  FireDAC.Stan.Option.TFDFetchOptions.DetailOptimize