Locate の使用
データセットの検索 への移動
Locate メソッドでは、指定された一連の検索条件に一致する最初の行にカーソルを移動します。最も簡単な形式では、検索対象となる列の名前、照合するフィールド値、検索オプション フラグを Locate に渡します。オプション フラグでは、検索で大文字/小文字を区別しないかどうかや、部分キー照合を使用できるかどうかなどを指定します。なお、部分キー照合とは、検索文字列がフィールド値の接頭文字列だけでよい場合の検索です。たとえば、次のコードでは、Company 列の値が "Professional Divers, Ltd." になる CustTable の最初の行にカーソルを移動します。
var LocateSuccess: Boolean; SearchOptions: TLocateOptions; begin SearchOptions := [loPartialKey]; LocateSuccess := CustTable.Locate('Company', 'Professional Divers, Ltd.', SearchOptions); end;
TLocateOptions SearchOptions; SearchOptions.Clear(); SearchOptions << loPartialKey; bool LocateSuccess = CustTable->Locate("Company", "Professional Divers, Ltd.",
一致するフィールドが Locate メソッドで見つかったら、それが含まれている最初のレコードが現在のレコードになります。Locate では、一致するレコードが見つかった場合は True を返し、そうでない場合は False を返します。検索に失敗した場合、現在のレコードは変わりません。
Locate は、複数の列に関して複数の値を検索する場合に最も威力を発揮します。検索値はバリアントであるため、検索条件でさまざまなデータ型を指定できます。検索文字列で複数の列を指定するには、その文字列内の個々の項目をセミコロンで区切ります。
検索値はバリアントであるため、複数の値を渡す場合は、引数としてバリアント配列を渡すか(たとえば Lookup メソッドの戻り値の場合など)、VarArrayOf 関数を使ってコード内でバリアント配列を生成する必要があります。次のコードは、複数の検索値と部分キー照合を使って複数の列に関して検索する例です。
with CustTable do Locate('Company;Contact;Phone', VarArrayOf(['Sight Diver','P']), loPartialKey);
TLocateOptions Opts; Opts.Clear(); Opts << loPartialKey; Variant locvalues[2]; locvalues[0] = Variant("Sight Diver"); locvalues[1] = Variant("P"); CustTable->Locate("Company;Contact", VarArrayOf(locvalues, 1), Opts);
Locate では、できるだけ高速の方法を用いて、一致するレコードを特定します。検索対象となる列がインデックス付きで、そのインデックスが指定の検索オプションと矛盾しない場合、Locate ではそのインデックスを使用します。