DataSetProvider・ClientDataSetのデータの更新処理について


KATU  2007-10-30 08:03:21  No: 28141

DataSetProvider(DP)・ClientDataSet(CDS)での更新処理で
どなたか教えてください。
2つのテーブルがあり個々にDP1・CDS1、DP2・CDS2としています。
同トランザクションでCDS1のApplyUpdateを呼び出してDP1のBeforeUpdateRecordで自分で更新処理を行い終わればCDS2も同じ用に更新しています。
try
  err := CDS1.ApplyUpdate(0);
  if err > 0 then abort;
  err := CDS2.ApplyUpdate(0);
  if err > 0 then abort;
  Commit;
except
  rollback;
end;
お教え頂きたいのが、1回目の更新でCDS2のApplyUpdateでエラーになり
エラー内容を修正して再度更新した場合にCDS1の修正内容が1回目の
更新処理で成功した為Changecountがゼロになり、2回目の更新処理では
適用されません。DP1のBeforeUpdateRecordが出ません。
この場合どのように処理すればよいのでしょうか?
長くなりましたが、どなたかよろしくお願いします。


めじな  2007-11-01 22:22:42  No: 28142

OleVariant型の変数を用意してApplyUpdates前にデータを退避し、エラーが発生したら戻すのはどうでしょうか。
確認してませんが以下のようなイメージです。

var
  escData: OleVariant;
begin
  escData := CDS1.Data;
  if CDS1.ApplyUpdates(0) > 0 then
    CDS1.Data := escData;
end;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加