我的表中有7列,分别为cj,lx,xh,zt,bh,szd,ssd,
我用query,我想写一个综合查询,允许每个edit中为空,但由于水平太臭,只会用穷举法,但因为项目太多,无法把各种情况写完,我想请问各路高手有没有不用穷举的方法,有的
话能否写给我,谢谢,在线等。

解决方案 »

  1.   

    要是允许为空的查询可以用Like ‘%’来设置Where的条件
      

  2.   

    楼主是不是想要综合查询呢?
    var
      sSql, sWhr: string;
    begin
      sSql := 'select * from tblname ';
      sWhr := '';
      
      if Edit1.Text <> '' then
        sWhr := 'where cj = ' + QuotedStr(Edit1.Text);
      if Edit2.Text <> '' then
        if sWhr <> '' then
          sWhr := sWhr + ' and lx = ' + QuotedStr(Edit2.Text)
        else
          sWhr := 'where cj = ' + QuotedStr(Edit2.Text);
      if Edit3.Text <> '' then
        if sWhr <> '' then
          sWhr := sWhr + ' and lx = ' + QuotedStr(Edit3.Text)
        else
          sWhr := 'where cj = ' + QuotedStr(Edit3.Text);
      ...
      sSql := sSql + sWhr;
      ADOQuery1.Close;
      ADOQuery1.SQL.Text := sSql;
      ADOQuery1.Open;
      ...
    end;
       
      

  3.   

    假定在最初的Query1.SQL.Text中:
    SELECT *
      FROM yourTable
     WHERE 
     cj=:cj_var  var SQL_Str: String;
    begin
      SQL_Str := '';                    //条件組合
      if Edit1.text <> '' then
        SQL_Str := SQL_Str + ' cj=:cj_var AND';
      if Edit2.text <> '' then
        SQL_Str := SQL_Str + ' lx=:lx_var AND';
      {...}  if trim(SQL_Str) = '' then exit;
      SQL_Str := Copy(SQL_Str,1,Length(SQL_Str)-3);
      Query1.Close;
      Query1.SQL.Delete(3);             //重新組合SQL文
      Query1.SQL.Insert(3,SQL_Str);  if Edit1.text <> '' then          //付値
        Query1.ParamByName('cj_var').AsString := Edit1.text;
      if Edit2.text <> '' then
        Query1.ParamByName('lx_var').AsInteger := StrToInt(Edit2.text);
      {...}
      Query1.Prepare ;
      Query1.Open;
    end;  (注:假定数据類型不同)