Bde.DBTables.TBDEDataSet.Lookup

提供: RAD Studio API Documentation
移動先: 案内検索

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!");


関連項目