Migaro. 技術Tips

                       

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


Delphi/400 データセットの検索機能(Locate)

今回はDelphi/400 データを扱うDataSetコンポーネントでの
レコード検索機能についてご紹介いたします。


Delphi/400では、QueryやTable、ClientDataSetなどの
TDataSetコンポーネントでデータを操作します。

データの操作で便利なのが、レコードの検索機能です。

TDataSetコンポーネントはLocate関数という機能を持ちます。

Locateメソッドを呼び出すと、指定したレコードのデータセットを検索し、
そのレコードにカーソルを移動できます。

例)

  // 1.単一フィールドでLocateする場合
  ClientDataSet1.Locate('TATITL', 'NO', [loCaseInsensitive, loPartialKey]);

  // 2.複数フィールドでLocateする場合
  ClientDataSet1.Locate('TAALBM;TAALNO', VarArrayOf([3, 1]), []);

第1引数と第2引数はキー項目です。
第1引数に検索するフィールド名を、第2引数に検索値を設定します。

キー項目が複数ある場合には、第1引数をセミコロンで、
第2引数をVarArrayOfで区切って設定できます。

  • 1.の例では、フィールド「TATITL」の値が「NO」で始まる最初のレコードに移動します。
  • 2.の例では、フィールド「TAALBM」の値が「3」、かつフィールド「TAALNO」の値が「1」の最初のレコードに移動します。

第3引数は検索オプションで、以下のように指定します。

  • loCaseInsensitive が設定されている場合、
     Locateは項目の照合時に大文字と小文字を区別しません。
  • loPartialKey が設定されている場合、
     Locateは項目の値を前方一致で探し出すことができます。

上記例の場合、1.2.とも下図のようにレコードが移動します。

 


また、Locate関数にはBoolean型で戻り値が設定されています。

  • 条件に一致する行があった場合はTrueが返ります。(行移動します)
  • 条件に一致する行がなかった場合はFalseが返ります。(行移動しません)

この検索機能を使うと、例えば一覧画面から詳細画面に遷移する際に
一覧画面で選択されていたレコードのキー項目情報を退避しておけば、
一覧画面に戻った際に元のレコード位置を戻すことも可能です。

 

 

(ミガロ.情報マガジン「MIGARO News!!」Vol.186 2016年5月号より)