SQL中使用日期筛选的问题

SQL中使用日期筛选的问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061206144136265.html
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中的日期时间型,每次都选择不到自己的需要的日期范围内的数据,前面的日期大于后面的时,还能取到数据!!/////////////////

'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  
   
 

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

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

是啊,   你按我的修改你这条语句  
   
  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   日期');

还是不会改,你是不是可以帮我改一下,这儿先谢谢了  
 

好吧.:):)  
   
  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;  
   
   
 

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

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

还有我的为什么不对!

可以.其实你不用数据库就能测试出你的问题.  
   
  你把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

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

从左到右

噢,谢谢

不客气.:):)

高手

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

对不起,我不知道怎么结帐?!

我的帖子--->管理--->

posted on 2009-04-22 10:51  delphi2007  阅读(329)  评论(0编辑  收藏  举报