procedure TForm4.BitBtn1Click(Sender: TObject);
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.ConnectionString:=('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=zysb.mdb;Persist Security Info=False');
adoquery1.sql.add('select 日期 as Tdate,姓名 as Tname,积休事由 as jxsy,积休天数 as ts');
adoquery1.sql.add(' from jxj');
adoquery1.sql.add('where str(日期)>='+#39+datetimetostr(DateTimePicker2.date)+#39+' and str(日期)<='+#39+datetimetostr(DateTimePicker3.date)+#39+' order by 日期');
adoquery1.Open;if adoquery1.Recordcount=0 then
showmessage('报表中没有可用数据!')
else
RvProject1.Execute;
end;
///////其中"日期"是acess中的日期时间型,每次都选择不到自己的需要的日期范围内的数据,前面的日期大于后面的时,还能取到数据!!/////////////////

解决方案 »

  1.   

    'where str(日期)>='+#39+datetimetostr(DateTimePicker2.date)+#39+' and str(日期)<='+#39+datetimetostr(DateTimePicker3.date)+#39+'---------修改一下就OK了Where DATEDIFF("d", 订购日期, '++#39+datetimetostr(DateTimePicker2.date)+#39+') <= 0
      And DATEDIFF("d", 订购日期, '++#39+datetimetostr(DateTimePicker3.date)+#39+') >= 0
      

  2.   

    对不起,多了一个加号Where DATEDIFF("d", 订购日期, '+#39+datetimetostr(DateTimePicker2.date)+#39+') <= 0
      And DATEDIFF("d", 订购日期, '+#39+datetimetostr(DateTimePicker3.date)+#39+') >= 0 
      

  3.   

    好象答非所问了,我说的是这一句:
    adoquery1.sql.add('where str(日期)>='+#39+datetimetostr(DateTimePicker2.date)+#39+' and str(日期)<='+#39+datetimetostr(DateTimePicker3.date)+#39+' order by 日期');
      

  4.   

    是啊, 你按我的修改你这条语句adoquery1.sql.add('where str(日期)>='+#39+datetimetostr(DateTimePicker2.date)+#39+' and str(日期)<='+#39+datetimetostr(DateTimePicker3.date)+#39+' order by 日期');..............修改adoquery1.sql.add('Where DATEDIFF("d", 订购日期, '+#39+datetimetostr(DateTimePicker2.date)+#39+') <= 0
      And DATEDIFF("d", 订购日期, '+#39+datetimetostr(DateTimePicker3.date)+#39+') >= 0  order by 日期');
      

  5.   

    好吧.:):)procedure TForm4.BitBtn1Click(Sender: TObject);
    begin
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.ConnectionString:=('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=zysb.mdb;Persist Security Info=False');
    adoquery1.sql.add('select 日期 as Tdate,姓名 as Tname,积休事由 as jxsy,积休天数 as ts');
    adoquery1.sql.add(' from jxj');
    adoquery1.sql.add('Where DATEDIFF("d", 订购日期, '+#39+datetimetostr(DateTimePicker2.date)+#39+') <= 0
      And DATEDIFF("d", 订购日期, '+#39+datetimetostr(DateTimePicker3.date)+#39+') >= 0  order by 日期');if adoquery1.Recordcount=0 then
    showmessage('报表中没有可用数据!')
    else
    RvProject1.Execute;
    end;
      

  6.   

    肯定是转换的格式不正确,不用DateTimeToStr 使用FormateDateTime试试看
      

  7.   

    谢谢sanmaotuo(老冯);问题解决了,能不能把"DATEDIFF("d", 订购日期, '+#39+datetimetostr(DateTimePicker2.date)+#39+') <= 0"解释一下,我看不懂,这个"d"是什么东东.
      

  8.   

    可以.其实你不用数据库就能测试出你的问题.你把DateTimePicker2.date设置为今天(2006-12-6) 然后你比较一下 '2006-12-31' 和 datetimetostr(DateTimePicker2.date)看看结果,是不是很意外? 居然'2006-12-31' < datetimetostr(DateTimePicker2.date)为什么呢? 因为datetimetostr(DateTimePicker2.date) = '2006-12-6 20:02:35' 而 -6 > -31
      

  9.   

    比较字符串的顺序是
    2-->2
    0-->0
    0-->0
    6-->6
    1-->1
    2-->2
    6-->3!!!!!!!
      

  10.   

    强烈鄙视问题解决后不结贴的人!
    强烈鄙视技术问题解决后把贴子转移到非技术区的人!
    鄙视你们!http://community.csdn.net/Expert/topic/5216/5216675.xml?temp=.9262659