今回は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月号より)