TClientDataSet
プロバイダーの概念を持たないローカル データセットとしてを使用しています。それを操作した後、変更を解決するために を使用して対応する SQL ステートメントを生成するメソッドが呼び出されStatusFilter
ます (基本的に SQL を生成します)。
ドキュメントを読んだ後、これは最初は簡単に見えました ( set StatusFilter to [dsInsert]
、すべての挿入 SQL をStatusFilter to [dsModified]
処理し、すべての更新を処理し、削除と同じように設定します)。
レコードを追加した場合は、それを編集します。設定するとStatusFilter to [dsInserted]
表示されますが、元のデータが表示されます。
レコードを追加し、編集してから削除すると、レコードStatusFilter set to [dsInserted] and [dsModified]
も表示されます。
そして他の同様の状況..
1)最初にすべての挿入を処理し、次にすべての更新を処理してからすべての削除を行うと、データベースが正しい状態で更新されることはわかっていますが、このアプローチは正しくないように見えます(役に立たないSQLステートメントを生成します)。
2)PRecInfo(ClientDataSet.ActiveBuffer + ClientDataSet.RecordSize).Attribute
情報 (dsRecNew、dsRecOrg など) にアクセスしようとしましたが、まだロジックを解決できません。
3)それを解決するためのロジックをプログラムできます。たとえばStatusFilter to [dsDeleted]
、レコードがその後削除されたかどうかを確認するために、処理して挿入、設定、および主キーで検索する前に..編集と同じで、挿入する前に、レコードがあったかどうかを確認します後で更新されたので、更新されたバージョンの挿入SQLなど..しかし、それはより簡単なはずです..
¿誰かがこれをエレガントで簡単な方法で解決しようとしましたか? 何か足りない?ありがとう