Lookup メソッドの使用
データセットの検索 への移動
Lookup メソッドでは、指定された検索条件に一致する最初の行を探します。一致する行が見つかったら、データセットに関連するすべての計算フィールドとルックアップ フィールドが強制的に再計算され、一致した行の 1 つまたは複数のフィールドが返されます。Lookup は、一致した行にカーソルを移動せず、その行の値を返すだけです。
最も簡単な形式では、検索対象となるフィールドの名前、照合するフィールド値、返される 1 つ以上のフィールドを Lookup に渡します。たとえば、次のコードでは、Company フィールドの値が "Professional Divers, Ltd." となる CustTable の最初のレコードを探して、会社名、担当者、会社の電話番号を返しています。
var LookupResults: Variant; begin LookupResults := CustTable.Lookup('Company', 'Professional Divers, Ltd.', 'Company;Contact; Phone'); end;
Variant LookupResults = CustTable->Lookup("Company", "Professional Divers, Ltd", "Company;Contact;Phone");
Lookup メソッドでは、最初に見つかった一致レコードの指定フィールドの値を返します。値はバリアントとして返されます。Lookup は、複数の戻り値を要求された場合、バリアント配列を返します。一致するレコードがない場合、Lookup は Null バリアントを返します。
Lookup は、複数の列に関して複数の値を検索する場合に最も威力を発揮します。列や結果フィールドが複数含まれる文字列を指定するには、その文字列内の個々のフィールドをセミコロンで区切ります。
検索値はバリアントであるため、複数の値を渡す場合は、引数としてバリアント配列を渡すか(たとえば Lookup メソッドの戻り値の場合など)、VarArrayOf 関数を使ってコード内でバリアント配列を生成する必要があります。次のコードは、複数の列に関して Lookup による検索を行う例です。
var LookupResults: Variant; begin with CustTable do LookupResults := Lookup('Company; City', VarArrayOf(['Sight Diver', 'Christiansted']), 'Company; Addr1; Addr2; State; Zip'); end;
Variant LookupResults; Variant locvalues[2]; Variant v; locvalues[0] = Variant("Sight Diver"); locvalues[1] = Variant("Kato Paphos"); LookupResults = CustTable->Lookup("Company;City", VarArrayOf(locvalues, 1), "Company;Addr1;Addr2;State;Zip"); // now put the results in a global stringlist (created elsewhere) pFieldValues->Clear(); for (int i = 0; i < 5; i++) // Lookup call requested 5 fields { v = LookupResults.GetElement(i); if (v.IsNull()) pFieldValues->Add(""); else pFieldValues->Add(v); }
Locate と同様に、Lookup でも、できるだけ高速の方法を用いて、一致するレコードを特定します。検索対象となる列がインデックス付きであれば、Lookup ではそのインデックスを使用します。