Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 用C+在ADO中搜索多个字段+;生成器XE4_Search_Ado_C++builder Xe4 - Fatal编程技术网

Search 用C+在ADO中搜索多个字段+;生成器XE4

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;

我使用Locate方法在TaToTable中搜索,但它不适用于多字段搜索。(我直接在TaToTable上搜索,因此在本例中对SQL不感兴趣)

以下代码在使用单个字段时可以正常工作,但不能用于多个字段

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.