问一个Delphi+Access的问题(100分)

  • 主题发起人 主题发起人 SmileSnake
  • 开始时间 开始时间
S

SmileSnake

Unregistered / Unconfirmed
GUEST, unregistred user!
由于客户要用Access作数据库,所以不得不用Access来完成。
有一个“日期/时间”字段,属性是用常规时间
用ADO做连接,采用Jet 4.0
在查询时间的时候总是说定义类型不正确,
比如select * from Load where CreateDateTime >= #12/21/2002 13:22:45#,
在Access中执行是可以的。


后来采用了比较土的方法
就是select * from load where YEAR(CreateDateTime) = 2002 AND
MONTH(CreateDateTime) = 12 AND ....依此类推。
才把它查询出来,但是这样写岂不是太繁了。
那位大侠有没有什么好方法?


另外,用Jet 4.0而不用别的是因为,在写日期/时间字段的时候,只有
这个方法不出错。(这一点我觉得很奇怪!)

我用的是Access XP, 而我在Access 2000下也试过也是不行的。sigh...
另外我的操作系统是Windows 2000 server

谢谢各位
 
使用查询参数,定义日期型的参数类型
 
好象 #12/21/2002 13:22:45# 这样的格式是不一定对的,与你的系统的日期分隔符等有关。
比如我的#2002-12-26#, 才是对的;而有时则是#2002/12/26#,所以你应该用试试几种组成
的方式。
 
with query do begin
sql.clear;
sql.add(select * from Load where CreateDateTime >= :DD');
params[0].AsDateTime :=strtodatetime('12/21/2002 13:22:45 ')
open;
end;
 
楼上所讲的象有道理
先改改这个全局变量吧
DateSeparator :Char
日期分隔符,用于分隔年月日

DateSeparator := '/';
 
和区域设置中的日期有关
 
用Parameters参数。
 
ADO的sql语法跟access的sql语法不太一样,你安real_clq的方法试试,或用参数
 
我试过,可以。CDate用来将String转化为DateTime
sql.add('SELECT * FROM Load WHERE CreateDateTime>=CDate(''12/21/2002 13:22:45'')')
 
to real_clq,这个问题我已经考虑到了,已经改了。不是这个问题。
to 四库全书,我想你说的有一定道理,我原来还以为这个不关ADO的事,
但事实是在Access中是可以的,而在ADO中就是不行,非常郁闷。
to ALL,等我试完了我再把积分给大家好吗?

谢谢大家的帮助。
 
注意日期的格式呀
 
问题解决用的是yaya8163的方法,很久没有用这个参数,一时给忘记了,
经yaya8163的提醒想起来了。谢谢。

yaya8163拿一般的分数。jomee和LiChaoHui提到了这个方法,就给15分
delphiland的方法让我耳目一新,但是CDate只能变日期,不能变成日期+时间,
用在日期上是对的,而且我试了一下没有CTime和CDateTime这样的函数,
很遗憾。
其他只能给参与分了。如果觉得有不合理给我来信,我挖一个坑,给你们分数。
谢谢大家关注。
鞠躬!
以后还要请大家多多帮忙!!!
 
后退
顶部