我使用了两个Tcombobox组件,和两个TDATEEDIT组件,想要达到的效果是这样:
combobox1的Items属性值有以下几个一班,二班,三班(bj),combobox2的ITEMS属性有:是用来排序的
不排序,按姓名(XM),按日期(regedate)三种,两个TDATEEDIT组件分别是开始和结束时间(条件),我现在的代码是:
 adoquery1.Close;
 adoquery1.SQL.Clear;
 adoquery1.SQL.Add('select * from student')
 adoquery1.sql.add(' where banji=:banji and regedate<:regedate1 and regedate>:regedate2');
 adoquery1.sql.add('order by :paixu asc');
 adoquery1.Parameters.ParamValues['banji']:=COMBOBOX1.TEXT;
adoquery1.Parameters.ParamValues['paixu']:=?????;
 adoquery1.Parameters.ParamValues['regedate1 ']:=DATEEDIT1.DATE;
 adoquery1.Parameters.ParamValues['regedate2 ']:=DATEEDIT2.DATE;
 adoquery1.open;
但是如果我想要这样的结果COMbobox1.text没有内容时候,可以查询全部记录,但是如果我的combobox1.text没有内容的时候,什么也查不出来,
2.排序的问题又怎么办?我不知道?????加什么,如果按XM排序的话,
adoquery1.Parameters.ParamValues['paixu']:='xm',提示类型不对,
如果COMBOBOX2.TEXT条件为不排序的话,怎么使ORDER BY语句无效,还是有其它方法?急啊...

解决方案 »

  1.   

    打错一句话,combobox1.text没有内容,什么结也没得,
      

  2.   

    1判断combobox1.text是不是空,当空的时候条件不加上去,其他也一样
    2order语句里面不能用参数,这种情况你只能用字符串连接来解决
      

  3.   

    var
      sqlstr,orderstr:string;orderstr:='';
    orderstr:='xm';
    sqlstr:='select * from student where 1=1';//加上1=1的目的是为了后面条件好加'and'
    if combobox1.text<>'' then
      sqlstr := sqlstr+' and banji='''+ combobox1.text+'''';
    if combobox2.text<>'' then
      ....//一样操作
    if orderstr<>'' then
       sqlstr := sqlstr+' order by ’+orderstr+' desc';sqlstr);
      

  4.   

    上面发错了,更正:
    var
      sqlstr,orderstr:string;orderstr:='';
    orderstr:='xm';
    sqlstr:='select * from student where 1=1';//加上1=1的目的是为了后面条件好加'and'
    if combobox1.text<>'' then
      sqlstr := sqlstr+' and banji='''+ combobox1.text+'''';
    if combobox2.text<>'' then
      ....//一样操作
    if orderstr<>'' then
       sqlstr := sqlstr+' order by ’+orderstr+' desc';
    adoquery1.close;
    adoquery1.sql.clear;
    adoquery1.sql.add(sqlstr);
    adoquery1.open;
      

  5.   

    楼上的是解决问题的不错的方法,另外日期的范围最好用字符窜否则会有想不到的错误
    and regedate=<:regedate1 and regedate>=:regedate2
    建议:
     adoquery1.Parameters.ParamValues['regedate1 ']:=StrToDateTime(FormatDateTime('yyyy-mm-dd,DATEEDIT1.DATE));
     adoquery1.Parameters.ParamValues['regedate2 ']:=StrToDateTime(FormatDateTime('yyyy-mm-dd,DATEEDIT2.DATE));
      

  6.   

    1判断combobox1.text是不是空,当空的时候条件不加上去,其他也一样
    2order语句里面不能用参数,这种情况你只能用字符串连接来解决
      

  7.   

    判断combobox1.text是不是空,做自己的处理
      

  8.   

    ADOQuery1.Close;
     ADOQuery1.SQL.Clear;
     ADOQuery1.SQL.Add('select * from student')
     ADOQuery1.SQL.add(' where banji=:banji and regedate  between :regedate2  and  :regedate1 order by regedate');//  :regedate2<:regedate1 
       
         ADOQuery1.Active :=false;
          //  注意:  ADOQuery1.Parameters[0].DataType := ftdatetime 
          //  注意:  ADOQuery1.Parameters[0].DataType := ftdatetime
    //regedate1 regedate2 所在的Parameters 的 DataType值 是否 为 ftdatetime          ADOQuery1.Parameters.ParamByName('regedate1').Value := DATEEDIT1.DATE;
              ADOQuery1.Parameters.ParamByName('regedate2').Value := DATEEDIT2.DATE;          ADOQuery1.Active := true;
    *****
    adoquery1不用open了
      

  9.   

    请问楼上的各位,DATEEDIT1这个控件在DELPHI5中有吗? 我用的是DELPHI 我怎么找不到呀??
      

  10.   

    在comboxponent list 中输入TDATEEDIT就能找到