在 a 中搜索多个字段TADODataSet
与使用其他字段几乎相同TDataSet
,使用Locate
函数和可选TLocateOptions
:
if ADODataSet1.Locate('CompanyID;Supplier',
VarArrayOf([Edit1.Text, Edit2.Text]),
[loPartialKey]) then
begin
// Record found
end;
正如您的评论表明您实际上正在使用 C++Builder 和TADOTable
,这是一个适用于它的示例(在新的 VCL Forms 应用程序中在 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.
};
您对原始问题的评论表明您真正想要的是搜索两列以查看它们是否与值匹配。您不能使用单个Locate
. 当然,两列都必须是相同的数据类型 - 如果不转换某些内容,就不能在数字字段和字符字段中搜索相同的数字(或字符)值:
var
LastName: Variant;
begin
LastName := Edit1.Text;
if ADOTable1.Locate('LastName', LastName, [loPartialKey]) or
ADOTable1.Locate('CompanyName', LastName, [loPartialKey]) then
begin
// Record found
end;
另一种选择是使用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.