Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


Delphi ClientDataSetのレコードステータス

今回はローカルキャッシュで便利な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月号より)