今回はローカルキャッシュで便利なTClientDataSetの
レコードのステータスを判定して利用するテクニックをご紹介します。
ClientDataSetにあるStatusFilterプロパティを使うと、
ClientDataSetのレコードに対して更新を行った場合、
追加・変更・削除といった特定の更新ステータスのレコードのみ抽出することができます。
StatusFilterプロパティで指定できる種類には次のものがあります。
- usUnmodified・・・変更されていないレコード
- usModified・・・・変更されたレコード
- usInserted・・・・挿入されたレコード
- usDeleted ・・・・削除されたレコード
これはレコードのフィルタ処理と同じようになりますので、
StatusFilterを設定後にDBGridで見ると更新データだけが表示され、
またファイルを順次読み込んだときにはそのデータのみ読み込まれます。
注意点としましては、usModifiedでは更新データの変更前データも表示されます。
例えば1レコードを変更後にStatusFilterを [usModified] とすると、
変更前と変更後の2つのレコードがフィルタ結果となります。
このため必要に応じてレコード毎にUpdateStatusプロパティを使用して
変更後のデータかどうかを確認する必要があります。
以上のことから、サーバーへ更新適用する前にデータのチェックを行いたい場合などは、
次のようなコードになります。
// (StatusFilter使用例)
with ClientDataSet1 do
begin
// 更新(追加、修正)データのみ抽出
StatusFilter := [usInserted, usModified];
try
First;
While not Eof do
begin
if UpdateStatus <> usUnmodified then
begin
// チェック処理
・・・
end;
Next;
end;
finally
// StatusFilter初期化
StatusFilter := [];
end;
end;
(ミガロ.情報マガジン「MIGARO News!!」Vol.204 2017年11月号より)