各位老师好!
    我现在要根据3个条件进行表中数据的查询,用Delphi.
就是说要在3个Edit里填写文字,然后把表里分别符合这3个
条件的字段的记录挑出来,用If () and () and () then...
但是我有时其中某一个Edit可能不填,就是希望不理这个条件,
那么如果不填,就什么也找不出来,如何不填就不理这个条件呢?
谢谢各位!

解决方案 »

  1.   

    var
      str: String;
    begin
      str := 'select * from table名 where 1=1';
      if trim(edit1.text)<>'' t hen str := str +' and col1='''+trim(edit1.text)+'''';
      if trim(edit2.text)<>'' t hen str := str +' and col2='''+trim(edit2.text)+'''';
      ....
      with adoquery1 do
      begin
        close;
        sql.text := str;
        Open;
      end;
    end;
      
      

  2.   

    '......like ''%'+ttrim(edit.text)+'%'' and .... like ''%'+
      

  3.   


    'select * from 表A where ColA like ''%'+ttrim(edit.text)+'%'' and ColB like ''%'+....'写一次就行了,不管你哪个没填! 一样执行!
      

  4.   

    如果是针对一个字段的话,就要用or换掉and
      

  5.   


    這個是我的查詢代碼.你參考一下.
    procedure Tqueryfrm.Button3Click(Sender: TObject);
        function AddPercent(sSource:string):string;
         begin
         result := sSource;
            if Pos('%',sSource)=0 then Result := sSource+'%';
        end;
    var sqlstr,swhere:string;
    begin
         sqlstr:='Select PQI_NUMBER,PQI_SUPPLIER,PQI_OSPOP,PQI_CREATER,PQI_CREATEDATE,PQI_CURRENCY,PQI_Status,PQI_TEXT,PQI_ID From tblospquota where PQI_NUMBER in(';
         sqlstr:=sqlstr+'Select distinct PQI_NUMBER From tblospquota A,tblospquotadt B where A.PQI_ID=B.PQI_ID(+) ';
         swhere:='';
         if combobox1.Text <> ''  then sWhere := sWhere + format(' AND A.PQI_NUMBER LIKE''%s'' ',  [ AddPercent(combobox1.Text) ]);
         if combobox2.Text <> ''  then sWhere := sWhere + format(' AND A.PQI_SUPPLIER LIKE ''%s'' ',  [ AddPercent(suppler) ]);
         if combobox3.Text <> ''  then sWhere := sWhere + format(' AND A.PQI_OSPOP LIKE ''%s'' ',  [ AddPercent(combobox3.Text) ]);
         if combobox4.Text <> ''  then sWhere := sWhere + format(' AND B.QID_ITM_CODE LIKE ''%s'' ',  [ AddPercent(combobox4.Text) ]);
         if radiogroup1.ItemIndex<>-1 then  sWhere := sWhere + format(' AND A.PQI_STATUS LIKE ''%s'' ',  [ AddPercent(status) ]);
         sqlstr:=sqlstr+swhere;
         sqlstr:=sqlstr+')';
         with quota.quotafrm.ADOQuery1 do
          begin
            close;
            sql.Clear;
            sql.Add(sqlstr);
            open;
          end;
        close;  
       with quota.quotafrm do
       begin
       DbGrid1.Columns[0].Title.caption:='報價單號';
       DbGrid1.Columns[1].Title.caption:='委外廠商';
       DbGrid1.Columns[2].Title.caption:='委外製程';
       DbGrid1.Columns[3].Title.caption:='建立者';
       DbGrid1.Columns[4].Title.caption:='建立日期';
       DbGrid1.Columns[5].Title.caption:='幣別';
       DbGrid1.Columns[6].Title.caption:='狀態';
       DbGrid1.Columns[7].Title.caption:='備註';
       DbGrid1.Columns[8].Width:=0;
       end;
    end;
      

  6.   

    用什么啊?
    table还是query?