0

データベースへのDataSnap Server2 つのTFDQuery's経由TFDConnectionがありMySQLます。このクエリは(neested datasets)master/detail relationship経由で行われます。TDataSourceこのデータは 1 つを介してエクスポートされTDataSetProviderます。

クライアント側には、TDataModulewith one TSQLConnection、 one TDSProviderConnection、 twoTClientDataSet'sがあり、1 つは the 用、もう 1 つMasterNeested DetailviaDataSetFieldプロパティ用です。

クライアントをテストすると、すべて正常に動作します。

問題は、同じ詳細レコードtwo clientsで作業simultaneouslyしているときに、あるクライアントの 1 つの詳細に書き込んだデータが 2 番目のクライアントから見えないことです。逆もまた同様です。

Bill1、Item1、OriginalDataという単純な請求書とアイテムの関係を持つこのシナリオがあるとします。

両方のクライアントでBill1を読み取ると、両方とも同じデータを読み取ります。最初のクライアントでOriginalDataModifiedDataに変更して実行すると、正常ApplyUpdatesに動作しますが、2 番目のクライアントで同じBill1を更新しても、変更されていないOriginalDataを読み取っています。

私がデータを書き込むと、MasterTableすべてが正常に動作しDetailTable、キャッシュなどからデータを取得するように見えます。BDEコンポーネントとデータベースを介してすべてを再現しParadox、問題はありませんが、使用する必要がありFireDacますMySQL

DataSnapそれでは、ここで質問です... ¿最初のクライアントで詳細レコードに書き込まれたデータが、 viaFireDacと で更新を呼び出した後、2 番目のクライアントから見えないのはなぜMySqlですか?

Delphi Xe5 update 2 を使用しています。

注:Master/Detailは であるparametrized Queryため、一度にアクティブになる請求書は 1 つだけです。

繰り返しますが、私の下手な英語で申し訳ありません。

4

1 に答える 1

0

サーバー側の設定FetchOptions.DetailOptimize=FALSEで解決しました。TFDConnection

DetailOptimize が true の場合 (FireDac のデフォルト)、現在の詳細データセットのキー フィールド値がマスター データセットのキー フィールド値と異なる場合にのみ、FireDac は詳細データセットを更新します。

詳細については、 FireDAC.Stan.Option.TFDFetchOptions.DetailOptimizeを参照してください。

于 2014-06-25T17:37:54.003 に答える