这样的话,你就先过一遍edit等东西(用计数器),如果发现有两个或两个以上的框的值不为空,则设置一个标识为true,然后动态组合sql(根据你的那个标识)。(对datatimepicker的话要额外做判断的)

解决方案 »

  1.   

    这样吧,你用几个变量string存一段SQL语句(如:and age=???)
    string使用前:='';在edit的onexit中对相应的string:='????'+edit?.text
    然后:SQL.add('....'+string1+string2.....)
      

  2.   

    onexit事件是怎么回事?
    按楼上的这么做,好象需要比较多的变量啊?
      

  3.   

    SQLStr := 'select * from table where 1=1';if edit1.text <> '' then 
      SQLStr := SQLStr + ' and 姓名="'+edit1.text+'" ';
    if edit3.text <> '' then
       SQLStr := SQLStr + ........................
      

  4.   

    procedure TForm1.Edit1Exit(Sender: TObject);
    begin
       if edit1.Text<>'' then age_sql_str:=' and age='+edit1.Text;
    end;
    真的不明白?还是
      

  5.   

    其实SQL语句有时是不能取巧的,
    不如试试用locate方法
      

  6.   

    呵呵,明白明白,我的大大的明白
    其实我已经做出来 了,只是想看看大家 的有什么不同。 
    okhai(不董) 的办法我也去试试,我用的是类似于antonye(陆小凤)的办法。
      

  7.   

    主要是实现对判断效果的优化
     不过通常全字段定制查询 可以采用半开放式SQL语句生成方式
      将所有条件和 条件值都返回到几个 combobox 或者 stringlist里 条件无非是 and or not 
     between ... 然后让用户自己直观的生成查询
     有时候对付麻烦的用户 还是比较方便的
      

  8.   

    用一个string来表示也是可以的,节省变量,主要用来表示where后的条件
    在使用前,SQLWHERESTR:=‘’
    procedure TForm1.Edit1Exit(Sender: TObject);
    begin
      if edit1.Text<>'' then SQLWHERESTR:=SQLWHERESTR+
    ' and age='+edit1.Text;
    end;
     
    几个条件合成后
    if pos('and',sqlwherestr)>0 then delete(sqlwherestr,1,4);
    where 后的语句就有了