7

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など..しかし、それはより簡単なはずです..

¿誰かがこれをエレガントで簡単な方法で解決しようとしましたか? 何か足りない?ありがとう

4

0 に答える 0