比如说我有三个edit...edit1.txt:='黑'   edit2.txt:='卡车'    edit.txt:='日期'如果edit1.txt 有值 就按条件是黑的搜索数据记录... edit2(空值) edit3(空值)如果edit1.txt 有值,edit2.txt 也有值...就按所有的卡车是黑色的条件去查询 edit3(空值)不管三个中哪一个或二个有值都按有值的条件去搜索满足条件的记录....我只求这方法(SQL语句)......

解决方案 »

  1.   

    var
      sqlstr: string;
    begin
      sqlstr := 'select * from table where 2 > 1';
      if trim(edit1.text) <> '' then
         sqlstr := sqlstr + 'and field1 =' + quotestr(edit1.text);
      if trim(edit2.text) <> '' then
         sqlstr := sqlstr + 'and field2 =' + quotestr(edit2.text);
      if trim(edit3.text) <> '' then
         sqlstr := sqlstr + 'and field3 =' + quotestr(edit3.text);
      ...
    end;
      

  2.   

    adoquery1.sql.text:= 'select * from table1 where 1=1 and 颜色 like ''%'+
       trim(edit1.text)+'%'' and 车型 like ''%'+ trim(edit2.text)+'%'' and 日期 like ''%'+
       trim(edit3.text)+'%''';
      

  3.   

    var 
      sqlstr: string; 
    begin 
      sqlstr := 'select * from table where 2 > 1'; 
      if trim(edit1.text) <> '' then 
        sqlstr := sqlstr + 'and field1 =' + quotestr(edit1.text); 
      if trim(edit2.text) <> '' then 
        sqlstr := sqlstr + 'and field2 =' + quotestr(edit2.text); 
      if trim(edit3.text) <> '' then 
        sqlstr := sqlstr + 'and field3 =' + quotestr(edit3.text); 
      ... 
    end;一楼是正确的。一般都这么处理的。
      

  4.   

    var
      sqlstr: string;
    begin
      sqlstr := 'select * from list1 where ';
      if trim(edit1.text) <> '' then
        sqlstr := sqlstr + '名称 =' + quotedstr(edit2.text);
      if trim(edit2.text) <> '' then
        sqlstr := sqlstr + '货号 =' + quotedstr(edit3.text);
      if trim(edit3.text) <> '' then
        sqlstr := sqlstr + '数量 =' + quotedstr(edit4.text);
      showmessage(sqlstr);
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add(sqlstr);
      ADOQuery1.Open;
    end;不用加2>1 会也错... quotedstr() 正确