2

ReconcileError イベントを使用して、特に特定のレコードで発生した更新エラーの後にユーザーがデータを修正できるようにしようとしています。

例:

1 つのフィールドと 3 つのレコードを持つデータセットがあり、このフィールドにはデータベースに一意の制約があり、データベースに到達したときに 1 つの値を競合するように変更し、データセットで ApplyUpdates を呼び出します。

これにより、プロバイダーでエラー (一意の制約違反) が生成され、applyupdates プロセスが中止され、ReconcileError メソッドの Action var で raAbort が返されます。

ReconcileError メソッドで使用しようとしました:

Action := HandleReconcileError(aDataSet, UpdateKind, E); 

** 編集 **

サーバーから返された DataSet レコードをデバッグしてダンプした後、この Dataset に 2 つのレコードがあることに気付きました。

少し混乱しています。この DataSet は常に 2 つのレコードで取得されますか? 古い/新しい値を持つレコードは 1 つだけにする必要があると考えました。

ありがとう。

4

3 に答える 3

3

少しデバッグして読んだ後、次のことがわかりました。

  • 適用できなかったレコードごとに OnReconcileError が呼び出され、それぞれに対して DataSet が作成されます。
  • UpdateKind が ukModify の場合、この DataSet には 2 つのレコードがあり、1 つのレコードは us​​UnModified (元のレコード) で、2 つ目のレコードは us​​Modified です (すべての変更はこの 2 つ目のレコードにあります)。
  • 変更が ukInsert または ukDelete の場合、DataSet のレコードは 1 つだけです。
  • この DataSet は、データを読み取ることができるように一時的に作成されたデータセットであるため、変更しないでください。
  • 調整ダイアログは、変更されたレコードの正しい値を表示しないため、期待どおりに機能しません (Delphi 2010 バグ?)
于 2010-05-13T12:47:16.980 に答える
1

OnReconcileError または OnUpdateError に渡されたレコードは、更新を適用できなかったレコードです。D2007 ヘルプ ファイルによると(これはヘルプ ファイル リンクであり、Web リンクではありません!) - DataSet パラメータに関するセクションに注意してください。

適用できなかった返されたレコードを破棄する場合でも、常に OnReconcileError または OnUpdateError イベント ハンドラをコーディングする必要があります。これら 2 つのイベントのイベント ハンドラーは同じように機能します。以下のパラメーターが含まれます。

DataSet: 適用できなかった更新されたレコードを含むクライアント データセット。このデータセットのメソッドを使用して、問題レコードに関する情報を取得し、問題を修正するためにレコードを編集できます。特に、現在のレコードのフィールドの CurValue、OldValue、および NewValue プロパティを使用して、更新の問題の原因を特定する必要があります。ただし、イベント ハンドラーで現在のレコードを変更するクライアント データセット メソッドを呼び出してはなりません。

于 2010-05-12T19:18:27.833 に答える