用这样一段代码,功能是用来查询开始日期到结束日期的药品购进情况:
        adoquery1.Close;
        adoquery1.SQL.Text:='SELECT 药品细表.药品编码,药品细表.药品名称,药品细表.规格,药品细表.产地,药品细表.单位, 购进表.零价, 购进表.进价, 购进表.数量,购进表.生产批号,购进表.有效期,购进表.供货单位, 购进表.经手人,购进表.购进日期, 购进表.入库日期, 购进表.id';
        adoquery1.SQL.Add(' FROM 购进表 INNER JOIN 药品细表 ON 购进表.药品编号 = 药品细表.药品编号 where 购进日期>=:date1 and 购进日期<=:date2 and 调进=:diaojin');
        adoquery1.Parameters.ParamByName('date1').Value:=datetimepicker2.Date;
        adoquery1.Parameters.ParamByName('date2').Value:=datetimepicker3.Date;
        adoquery1.Parameters.ParamByName('diaojin').Value:='商场';
        adoquery1.Open;
        if adoquery1.IsEmpty then
        begin
                showmessage('不存在此期间的商场进货纪录');
                N1.Enabled:=true;
                exit;
        end;
但发现当查询的开始日期和结束日期相同的时候(譬如:要查询从2003-2-20~2003-2-20的记录),查询出来的结果集并不包含2003-2-20的记录,但事实上2003-2-20是有记录的。请问高手为什么会这样子,怎样解决??

解决方案 »

  1.   

    datetimepicker2的time属性设置成0:00:01
    datetimepicker3的time属性设置成23:59:59
      

  2.   

    购进日期>==:date1 and 购进日期<==:date2
      

  3.   

    那应该怎样解决呢?能写出SQL SERVER数据库端的脚本吗?
      

  4.   

    只要将 
    adoquery1.SQL.Add(' FROM 购进表 INNER JOIN 药品细表 ON 购进表.药品编号 = 药品细表.药品编号 where 购进日期>=:date1 and 购进日期<=:date2 and 调进=:diaojin');
    中的
    购进日期>=:date1 and 购进日期<=:date2
    替换成
    购进日期>==:date1 and 购进日期<==:date2
    你可以试试看!
      

  5.   

    针对你的情况:建议别用比较,使用 BETWEEN AND 即可.
      

  6.   

    以上的方法都试过了,但都是不行!但是我在sql server里直接打:
     SELECT 药品细表.药品编码,药品细表.药品名称,药品细表.规格,药品细表.产地,药品细表.单位, 购进表.零价, 购进表.进价, 购进表.数量,购进表.生产批号,购进表.有效期,购进表.供货单位, 购进表.经手人,购进表.购进日期, 购进表.入库日期, 购进表.id FROM 购进表 INNER JOIN 药品细表 ON 购进表.药品编号 = 药品细表.药品编号 where 购进日期>='2003-2-20' and 购进日期<='2003-2-20' and 调进='商场'
      你们也列个标试试吧!如果有解决方法的话就共享出来吧!
      

  7.   

    购进日期>='2003-2-20 00:00:00' and 购进日期<='2003-2-20 23:59:59' 或者购进日期>='2003-2-20 00:00:00:000' and 购进日期<='2003-2-20 23:59:59:000' 
      

  8.   

    与你存入的日期格式有关,按你的要求,在保存日期时:最好:formatdatetime('yyyy-mm'dd',date)//格式化一下日期这样保存到数据库中的日期格式为,如:'2003-2-20 00:00:00' 不带有时间//按你的语句查询即可
      

  9.   

    up renzhm(戴尔飞) 和  booksfount(books) 
    datetimepicker.date 是有时间的,格式是:2003-1-1 00:00:00,你需要用format一下。
      

  10.   

    between strToDateTime('2003-1-1 00:00:00.001')
    and  strToDateTime('2003-1-1 23:59:59.999)
    这样不行的话就没有办法了
      

  11.   

    购进日期字段改为convert(varchar(8),购进日期,112)
    datetimepicker.date改为FormatDateTime('yyyy-mm-dd,datetimepicker.date)再比较保证行。
      

  12.   

    购进日期字段改为convert(varchar(10),购进日期,112)
    上面错了
      

  13.   

    购进日期字段改为convert(varchar(10),购进日期,121)
    上面错了
      

  14.   

    1、推荐用BETWEEN...AND;
    2、试试不用INNER ON,SQL改成
      adoquery1.SQL.Text:='SELECT 药品细表.药品编码,药品细表.药品名称,药品细表.规格,药品细表.产地,药品细表.单位, 购进表.零价, 购进表.进价, 购进表.数量,购进表.生产批号,购进表.有效期,购进表.供货单位, 购进表.经手人,购进表.购进日期, 购进表.入库日期, 购进表.id';
      adoquery1.SQL.Add(' FROM 购进表, 药品细表 WHERE 购进表.药品编号 = 药品细表.药品编号 AND (购进日期 BETWEEN :date1 AND :date2) AND 调进=:diaojin');
    3、参数设置的语句改成:
      adoquery1.Parameters.ParamByName('date1').Value := Int(datetimepicker2.Date);
      adoquery1.Parameters.ParamByName('date2').Value := Int(datetimepicker3.Date);
      

  15.   

    购进日期>='2003-2-20 00:00:00:000' and 购进日期<='2003-2-20 23:59:59:998' 
      

  16.   

    'SELECT 药品细表.药品编码,药品细表.药品名称,药品细表.规格,
    药品细表.产地,药品细表.单位, 购进表.零价, 购进表.进价, 
    购进表.数量,购进表.生产批号,购进表.有效期,购进表.供货单位,
    购进表.经手人,购进表.购进日期, 购进表.入库日期, 购进表.
    FROM 购进表 INNER JOIN 药品细表
    ON 购进表.药品编号 = 药品细表.药品编号
    where Convert(Varchar(10),购进表.购进日期,121)>='''
    +FormatDateTime('yyyy-mm-dd',datetimepicker2.Date)
    +''' and Convert(varchar(10),购进表.购进日期,121)<='''
    +FormatDateTime('yyyy-mm-dd',datetimepicker2.Date)
    +''' and 调进=:diaojin'先不用参数试试,这样不可能不行,因为我一直都是这样做的。