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が出ません。
この場合どのように処理すればよいのでしょうか?
長くなりましたが、どなたかよろしくお願いします。
OleVariant型の変数を用意してApplyUpdates前にデータを退避し、エラーが発生したら戻すのはどうでしょうか。
確認してませんが以下のようなイメージです。
var
escData: OleVariant;
begin
escData := CDS1.Data;
if CDS1.ApplyUpdates(0) > 0 then
CDS1.Data := escData;
end;
ツイート | ![]() |