Bde.DBTables.TBDEDataSet.Lookup
Delphi
function Lookup(const KeyFields: string; const KeyValues: Variant; const ResultFields: string): Variant; override;
C++
virtual System::Variant __fastcall Lookup(const System::UnicodeString KeyFields, const System::Variant &KeyValues, const System::UnicodeString ResultFields);
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
function | public | Bde.DBTables.pas Bde.DBTables.hpp |
Bde.DBTables | TBDEDataSet |
説明
指定された検索値に一致するレコードからフィールド値を取得します。
Lookup メソッドを呼び出すと、指定のフィールドに指定の値が格納されているレコードをデータセットで検索し、見つかったレコード内の指定のフィールド値を返すことができます。他のデータセット検索メソッドとは異なり、Lookup メソッドでは、データセットのレコード ポインタを移動せずに検索を実行します。これは、レコードを編集モードや挿入モードにしたまま、レコード データの検証を行う際に役に立ちます。
KeyFields パラメータは、検索条件となる 1 つまたは複数のフィールドの名前で構成される文字列です。複数のフィールドが検索条件となる場合、KeyFields は、フィールド名をセミコロンで区切ったリストになります。
KeyValues パラメータは、KeyFields で指定されたフィールドの検索値を格納するバリアント配列です。複数の検索値を指定するには、KeyValues をバリアント配列で引数として渡すか、VarArrayOf ルーチンを使ってその場でバリアント配列を作成します。これらの検索値は、対応するフィールドが KeyFields で並んでいる順序のとおりに指定する必要があります。たとえば、最初の値は KeyFields の最初のフィールドに使用され、2 番目の値は KeyFields の 2 番目のフィールドに使用され、というように指定します。
ResultFields パラメータは、値を返す 1 つまたは複数のフィールドの名前で構成される文字列です。複数のフィールドの値が返される場合、ResultFields は、フィールド名をセミコロンで区切ったリストになります。
Lookup では、ResultFields で指定されたフィールドの値を格納したバリアント配列を返します。
Lookup では、できるだけ高速の手法を用いて、一致するレコードを探します。KeyFields で指定された検索フィールドがインデックス付きであれば、Lookup ではそのインデックスを使用します。そうでない場合、Lookup では検索用のフィルタを作成します。
以下の例では、Lookup メソッドを使用して、サンプル Paradox テーブルの Customer を検索しています。検索条件となるフィールドは Company と State の 2 つです。また、検索条件となる値は、これら 2 つのフィールドの値 "Blue Sports" と "OR" です。検索に成功するには、Company フィールドに値 "Blue Sports" が格納され、かつ、State フィールドに値 "OR" が格納されているレコードが存在する必要があります。どちらかの条件が満たされなければ、検索は失敗します(これらの条件を満たすレコードがこのテーブルには存在しているので、検索は成功します)。Lookup メソッドの実行により、CustNo フィールドと Addr1 フィールドの値が返されます。検索が失敗した場合は、返されたバリアント配列に VarType 関数を適用した結果、varNull が返されます。
procedure TForm1.Button1Click(Sender: TObject);
var
V: Variant;
C: Integer;
A: String;
begin
V := Table1.Lookup('Company;State',
VarArrayOf(['Blue Sports', 'OR']),
'CustNo;Addr1');
if not (VarType(V) in [varNull]) then begin
C := V[0];
A := V[1];
ShowMessage(IntToStr(C) + #10 + A);
end
else
ShowMessage('Search unsuccessful!');
end;
int C;
AnsiString A;
Variant V;
V = Table1->Lookup("Company;State",
VarArrayOf(OPENARRAY(Variant, ("Blue Sports","OR"))),
"CustNo;Addr1");
if !(VarType(V) == varNull)
{
C = V[0];
A = V[1];
ShowMessage(IntToStr(C) + #10 + A);
}
else
ShowMessage("Search unsuccessful!");