比如在一张表中有编号,姓名,所在城市等字段,如何对这些字段进行组合查询呢?是否有向VFP中Filter那样的工具呢?

解决方案 »

  1.   

    你可以用SQL语句实现,
    用的是什么数据库?
      

  2.   

    用SQL语句就可以。
    用adoquery,为adoquery.sql赋值就可以,如下:
    adoquery.sql.add('selcet * from Tablename where 编号='' and 姓名=''......')
      

  3.   

    我的实现方法,仅共借鉴var sSQL,sWhere: String;
        isEdit: Boolean;
        isAnd: String;
        procedure isWhere;
            begin
            if isAnd='' then isAnd:=' where ' else isAnd:=' and ';
            end;
    begin
    try
    DBGrid1.DataSource:=nil;
    sSQL:='select * from arch ';if Trim(Edit5.Text)<>'' then
        begin
        isWhere;
        sWhere:=sWhere+isAnd+' username like '+TCommon.AddYH('%'+Trim(Edit5.Text)+'%');
        end;
    if Trim(Edit7.Text)<>'' then
        begin
        isWhere;
        sWhere:=sWhere+isAnd+' usercardid like '+TCommon.AddYH('%'+Trim(Edit7.Text)+'%');
        end;
    if Trim(Edit8.Text)<>'' then
        begin
        isWhere;
        sWhere:=sWhere+isAnd+' userAddr like '+TCommon.AddYH('%'+Trim(Edit8.Text)+'%');
        end;
    if Trim(Edit9.Text)<>'' then
        begin
        isWhere;
        sWhere:=sWhere+isAnd+' userphone like '+TCommon.AddYH('%'+Trim(Edit9.Text)+'%');
        end;
    if Trim(Edit12.Text)<>'' then
        begin
        isWhere;
        sWhere:=sWhere+isAnd+' capacity='+chr(39)+Trim(Edit12.Text)+chr(39);
        end;
    if Trim(Edit28.Text)<>'' then
        begin
        isWhere;
        sWhere:=sWhere+isAnd+' sectionid='+chr(39)+Trim(Edit28.Text)+chr(39);
        end;
    if Trim(Edit27.Text)<>'' then
        begin
        isWhere;
        sWhere:=sWhere+isAnd+' section='+chr(39)+Trim(Edit27.Text)+chr(39);
        end;
    if Trim(Edit31.Text)<>'' then
        begin
        isWhere;
        sWhere:=sWhere+isAnd+' transvol='+chr(39)+Trim(Edit31.Text)+chr(39);
        end;
    if Trim(Edit33.Text)<>'' then
        begin
        isWhere;
        sWhere:=sWhere+isAnd+' rack='+chr(39)+Trim(Edit33.Text)+chr(39);
        end;if StrToInt(WholeParam.OperatorInfo.OperatorRank)>1 then
        isEdit:=False
    else isEdit:=True;
    TDBOperate.GetDataSQL(FDM1.Q1,sSQL+sWhere,isEdit);
    Panel7.Caption:='共查出 '+Inttostr(FDM1.Q1.Recordcount)+' 条';
    FDM1.DS1.DataSet:=FDM1.Q1;
    DBGrid1.DataSource:=FDM1.DS1;
    Except
    end;
      

  4.   

    下面的方法可以的:
    with adoquery1 do
       begin
          close;
          sql.clear;
          sql.add('select * from 表名 where (姓名=:name)and(编号=:code)');
          parameters.parametebyname('name').value:=一个来源值;//当然,你也可以用静态的SQL语句;
          parameters.parametebyname('code').value:=另一个来源值;
          open;
       end;
       
      

  5.   

    组合查询,加%就是模糊查询procedure TForm11.Button1Click(Sender: TObject);
    var
      sqlstr:string;
    begin
       sqlstr:='select * from hjgl.jbqk where (1=1)';
       if edit1.Text <>'' then
       sqlstr:=sqlstr+'and (jb_name='''+edit1.text+''')';
       if edit3.text<>'' then
       sqlstr:=sqlstr+'and (jb_jg='''+edit3.text+''')';
       if combobox1.Text<>'' then
       sqlstr:=sqlstr+'and (jb_sex='''+combobox1.text+''')' ;   ADOQuery1.Close ;
       ADOQuery1.SQL.Clear ;
       ADOQuery1.SQL.Add(sqlstr);
       ADOQuery1.Open ;
      

  6.   

    组合查询,加%就是模糊查询
    sqlstr:='select * from hjgl.jbqk where (1=1)';
       if edit1.Text <>'' then
       sqlstr:=sqlstr+'and (jb_name='''+edit1.text+''')';
       if edit3.text<>'' then
       sqlstr:=sqlstr+'and (jb_jg='''+edit3.text+''')';
       if combobox1.Text<>'' then
       sqlstr:=sqlstr+'and (jb_sex='''+combobox1.text+''')' ;   ADOQuery1.Close ;
       ADOQuery1.SQL.Clear ;
       ADOQuery1.SQL.Add(sqlstr);
       ADOQuery1.Open ;
      

  7.   

    filter过滤还是很好用,其实还是用SQL语句来实现不较好!
      

  8.   

    你可以利用filter设置过滤条件表达式,不过涉及到的字段必须全是索引,
      

  9.   

    最好是用SQL, 因为这样你以后升级也容易些