首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用C++Builder XE4搜索ADO中的多个字段

用C++Builder XE4搜索ADO中的多个字段
EN

Stack Overflow用户
提问于 2014-02-13 16:26:36
回答 1查看 1.8K关注 0票数 1

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

以下代码在使用单个字段时运行良好,但不适用于多个字段!

代码语言:javascript
复制
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(...){}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-13 16:58:16

TADODataSet中搜索多个字段的工作与使用Locate函数和可选的TLocateOptions对任何其他TLocateOptions的搜索几乎是一样的。

代码语言:javascript
复制
if ADODataSet1.Locate('CompanyID;Supplier', 
                      VarArrayOf([Edit1.Text, Edit2.Text]), 
                      [loPartialKey]) then
begin
  // Record found
end;

正如您的评论所指出的,您实际上正在使用C++Builder和TADOTable,这里有一个也适用于它的示例(在新的VCL窗体应用程序中在C++Builder XE5下编译和测试):

代码语言:javascript
复制
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来完成这个任务,但是可以使用多个调用(Delphi -考虑到这里的其他示例,您应该能够轻松地将其转换为C++ Builder )。当然,这两列都必须是相同的数据类型--如果不进行转换,就不能搜索相同数值(或字符)值的数字字段和字符字段:

代码语言:javascript
复制
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翻译):

代码语言:javascript
复制
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.
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21759842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档