一张表有5个字段,分别为a1,a2,a3,a4 五个字段都可能为空!我用一个DBCombobox作为检索条件,DBCombobox显示的值可能是a1下的,也可能是a2下的,依此类推!那么怎么选出符合条件的记录?

解决方案 »

  1.   

    select * from 表 where a1='值' or a2='值' or a3='值' or a4='值'
      

  2.   

    Filter :='a1=''值'' or a2=''值'' or a3=''值'' or a4=''值''';
    Flitered := true;
    refresh;
      

  3.   

    这样好象不行,如果a1下有a,但是要查a2下有a,怎么办?是不是设计的问题?
      

  4.   

    如果我加上一个字段(一共6个字段了),第一个字段用一个Edit1来输入搜索条件!后5个按照上面的要求搜索!我是这样做的:
         with ADOQuery1 do
          begin
           Close;
           SQL.Clear;
           SQL.Add('select t_name,t_1,t_2,t_3 from table1');
           SQL.Add(' where t_name='+''''+trim(Edit1.text)+'''');
            if DBComboBox1.ItemIndex<>-1 then
             begin
              SQL.Add('and t_1='+''''+trim(DBComboBox1.Text)+''''+' or '+'t_2='+''''+trim(DBComboBox1.Text)+''''+' or '+'t_3='+''''+trim(DBComboBox1.Text)+'''');
             end;
           open;
          end;
    可是问题是:我明明判断了搜索t_name的条件,可是查询出来的记录的t_name不为Edit1的值,只是t_1,t_2,t_3满足搜索条件!怎么会这样?
      

  5.   

    不要用DBComboBox,应该使用5个ComboBox分别对应5个字段,这样程序清晰。
      

  6.   

    with ADOQuery1 do
          begin
           Close;
           SQL.Clear;
           SQL.Add('select t_name,t_1,t_2,t_3 from table1');
           SQL.Add(' where t_name='''+trim(Edit1.text)+'''');
            if DBComboBox1.ItemIndex<>-1 then
             begin
              SQL.Add('and (t_1='''+trim(DBComboBox1.Text)+''' or t_2='''+trim(DBComboBox1.Text)+''' or t_3='''+trim(DBComboBox1.Text)+''')');
             end;
           open;
          end;
      

  7.   

    这个一个动态查询的问题。
    你设置两个变量一个是sql语句的单查询:sSql;另外一个是查询条件变量:sSqlWhere
    那么你就可以这么写:
    ……
    sSql:='select * from table where 1=1';
    sSqlWhere:='and a1='''+utrim(dbcombox.text)+''' or a2='''+utrim(dbcombox.text)+''' or a3='''+utrim(dbcombox.text)+''' or a4='''+utrim(dbcombox.text)+'';
    这样就保证了你在满足任何一个条件时都能有正确的sql语句,正确的返回值
      

  8.   

    跟踪进取看看判断语句执行没有不就可以了?=====================================================
    可是问题是:我明明判断了搜索t_name的条件,可是查询出来的记录的t_name不为Edit1的值,只是t_1,t_2,t_3满足搜索条件!怎么会这样?
      

  9.   

    用两个ComboBox,一个选择字段,一个用来选择值,选择值的窗口随着字段选择的结果改变
      

  10.   


    Filter :='a1=''值'' or a2=''值'' or a3=''值'' or a4=''值''';
    Flitered := true;
    refresh;