Search 用C+在ADO中搜索多个字段+;生成器XE4
我使用Locate方法在TaToTable中搜索,但它不适用于多字段搜索。(我直接在TaToTable上搜索,因此在本例中对SQL不感兴趣) 以下代码在使用单个字段时可以正常工作,但不能用于多个字段Search 用C+在ADO中搜索多个字段+;生成器XE4,search,ado,c++builder-xe4,Search,Ado,C++builder Xe4,我使用Locate方法在TaToTable中搜索,但它不适用于多字段搜索。(我直接在TaToTable上搜索,因此在本例中对SQL不感兴趣) 以下代码在使用单个字段时可以正常工作,但不能用于多个字段 void __fastcall TForm1::Button1Click(TObject *Sender) { TLocateOptions LOpts; LOpts.Clear(); LOpts << loPartialKey;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TLocateOptions LOpts;
LOpts.Clear();
LOpts << loPartialKey;
Variant VAR[1];
VAR[0] = Variant(Edit1->Text);
try{
if ( ADOTable1->Locate("CompanyID;Supplier", VAR, LOpts) ){
// Record found
}
}
catch(...){}
}
void\uu fastcall TForm1::Button1Click(TObject*Sender)
{
t位置选项LOpts;
LOpts.Clear();
文本);
试一试{
if(ADOTable1->定位(“公司ID;供应商”,VAR,LOpts)){
//找到记录
}
}
捕获(…){}
}
在tODataSet
中搜索多个字段的操作与任何其他TDataSet
几乎相同,使用函数和可选的tLocationOptions
:
if ADODataSet1.Locate('CompanyID;Supplier',
VarArrayOf([Edit1.Text, Edit2.Text]),
[loPartialKey]) then
begin
// Record found
end;
正如您的评论所指出的,您实际上正在使用C++Builder和TaToTable
,下面是一个同样适用于它的示例(在新的VCL表单应用程序中,在C++Builder XE5下编译和测试):
另一种选择是使用<代码>过滤器< /> >(再次,Delphi代码-直通C++ Builder翻译):
能否显示一些您尝试使用的代码?
TCustomADODataSet.Locate()
?您发布的代码尝试搜索一个字段,因为您只提供了一个值。我认为你很困惑(或者你的问题措辞笨拙)。您正在寻找SQL的等价项,其中(CompanyID='SomeValue')或(Supplier='SomeValue')
,而在单个搜索操作中使用ADOTable是不可能的。你需要做两件事。啊哈,是的,这就是我想要的:-)在多个字段中搜索一个值WHERE(CompanyID='SomeValue')或(Supplier='SomeValue')
。但是用ADOTable似乎是不可能的?谢谢你,肯…这是我为单个字段编写的代码,但不适用于多个字段!内联t定位选项LOpts;LOpts.Clear();文本);尝试{if(ADOTable1->Locate(“CompanyID”,VAR,LOpts)){//Record found}}}catch(…){}//Do nothing
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.
};
var
LastName: Variant;
begin
LastName := Edit1.Text;
if ADOTable1.Locate('LastName', LastName, [loPartialKey]) or
ADOTable1.Locate('CompanyName', LastName, [loPartialKey]) then
begin
// Record found
end;
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.