sql.Add('select * from a where lsjzj>=0 and  rq>:date1 and rq<:date2');
 Parameters.ParamByName('date1').Value := FloatToDateTime(dtp1.Date);
Parameters.ParamByName('date2').Value := FloatToDateTime(dtp2.Date);
为什么查询出来的数据不准确啊?还有别的方法查询吗?

解决方案 »

  1.   

    如果结果和你预想的不一样,那是你的查询条件设置的不正确,而且FloatToDateTime(dtp1.Date);这样没必要。
      

  2.   

    首先你的那个字段在数据库中是DATETIME,还是DATE;如果是DATE的话,那你看看dtp1和dtp2中的属性TIME有没有去除?像你这样的写法不用FloatToDateTime()转化的。
      

  3.   

    KE YI YONG "BETWEEN AND"............
      

  4.   

    Parameters.ParamByName('date1').Value := dateof(dtp1.Datetime);
    Parameters.ParamByName('date2').Value := dateof(dtp2.Datetime);//若数据中中为DATETIME.而你想利用date比较
    那需要利用使用 CONVERT:CONVERT (data_type[(length)], expression [, style])
      

  5.   

    数据库里面是datetime型的,KE YI YONG "BETWEEN AND"............ 也是不可以的~
      

  6.   

    jerry8() :能说一下CONVERT (data_type[(length)], expression [, style])具体用法吗?
      

  7.   

    sql.Add('select * from a where lsjzj>=0 and  convert(char(10),rq,111)>:date1 and convert(char(10),rq,111)<:date2');
     Parameters.ParamByName('date1').Value := dtp1.Date;
    Parameters.ParamByName('date2').Value := dtp2.Date;
    为么查不到数据哪?
      

  8.   

    没有必要用Floattodatetime,你在参数属性里面把date1,date2,的属性设为date型,然后在参数赋值时写如下:
     Parameters.ParamByName('date1').Value := dtp1.Date;
    Parameters.ParamByName('date2').Value := dtp2.Date;
    这样就可以了