1

私は FireDac を初めて使用し、コンポーネントについて理解しようとしています。以前にClientDataSetsを使用したことがあるので、同様の機能を期待していると思います。DataModule に FDQuery があり、実行時にこのデータのビューを作成したいと考えています。以前にこれを行っていた方法は、ClientDataSets と CloneCursor 関数を使用することです。これは、「独立した」データセットで作業できるが、変更をソースに保存できることを意味します。

ただし、FireDac ではこれができないようです。別の FDQuery コンポーネントで CloneCursor を使用しようとしましたが、接続エラーが発生しました (これらのプロパティが複製されないため)。データセットのクローンを作成して変更を投稿できるFDMemTableで部分的に動作しましたが、DBに保存するには、ソースFDQueryで「ApplyUpdates」を呼び出す必要があります。

ClientDataSet のように、FDMemTable から DB にデータを直接保存するのを妨げている何かが欠けていますか? FDMemTable で applyupdates を試しましたが、喜びはありません。

お時間をいただきありがとうございます

4

1 に答える 1

0

私はこの問題に取り組んできましたが、FDQuery から複製された FDMemTable への変更は、1) 複製された FDQuery がキャッシュ更新モードであり、2) の場合にのみ、基になるデータベースに書き戻されることがわかりました。元の FDQuery で ApplyUpdates を呼び出します。これは、自分の質問に投稿したコメントと一致しています。

FDQuery がキャッシュ更新モードでなく、FDMemTable の CloneCursor メソッドを呼び出して FDQuery を複製する場合、メモリ内データは FDQuery と FDMemTable の間で同期されますが、元の FDQuery によって行われた変更のみが基になるデータベース。FDMemTable によって実行された編集は FDQuery に表示されますが、FDQuery はそれらを基になるテーブルに書き込みません。

投稿されたデータを基になるデータベースにすぐに書き込む必要がある場合は、参加する各データセットに AfterPost、AfterDelete、および AfterInsert イベント ハンドラーを追加し、これらのイベント ハンドラーから元の FDQuery で ApplyUpdates を呼び出すことができます (もちろん、イベント ハンドラーを 1 つだけ作成し、各データセットの AfterPost、AfterDelete、および AfterInsert イベントに使用します)。

于 2017-01-03T18:58:02.137 に答える