内の複数のフィールドの検索は、関数とオプションの を使用して、TADODataSet他の とほとんど同じように行われます。TDataSetLocateTLocateOptions
if ADODataSet1.Locate('CompanyID;Supplier',
VarArrayOf([Edit1.Text, Edit2.Text]),
[loPartialKey]) then
begin
// Record found
end;
あなたのコメントは、あなたが実際に C++Builder と を使用していることを示しTADOTableているため、同様に機能する例を次に示します (新しい VCL フォーム アプリケーションの C++Builder XE5 でコンパイルおよびテストされています)。
TLocateOptions Opts;
Opts.Clear();
Opts << loPartialKey;
Variant locateValues[2];
locateValues[0] = Variant(Edit1->Text);
locateValues[1] = Variant(Edit2->Text);
if (ADOTable1->Locate("CompanyID;Supplier", VarArrayOf(locateValues, 1), Opts))
{
// Record found.
};
元の質問に対するあなたのコメントは、実際に必要なのは 2 つの列を検索して、それらのいずれかが値と一致するかどうかを確認することであることを示しています。単一Locateの でそれを行うことはできませんが、複数の呼び出しで行うことができます (Delphi コード - ここにある他のサンプルがあれば、C++ Builder に簡単に変換できるはずです)。もちろん、両方の列が同じデータ型である必要があります。数値フィールドと文字フィールドで同じ数値 (または文字) 値を検索するには、何かを変換する必要があります。
var
LastName: Variant;
begin
LastName := Edit1.Text;
if ADOTable1.Locate('LastName', LastName, [loPartialKey]) or
ADOTable1.Locate('CompanyName', LastName, [loPartialKey]) then
begin
// Record found
end;
もう 1 つの方法は、Filter(ここでも、Delphi コード - 簡単な C++ Builder 変換) を使用することです。
AdoTable1.Filter := 'LastName = ' + QuotedStr(Edit1.Text) +
' or CompanyName LIKE "' + QuotedStr(Edit1.Text) + '%"';
AdoTable1.Filtered := True;
AdoTable1.First;
// Get key values needed to locate on a full key, and then clear the filter.