日期比较时的怪问题(50分)

  • 主题发起人 主题发起人 lixd
  • 开始时间 开始时间
L

lixd

Unregistered / Unconfirmed
GUEST, unregistred user!
......
strsql='select * from doc where recdate between :startdate and :enddate';
query1.close;
query1.sql.clear;
query1.sql.add(strsql);
query1.sql.param[0] := strtodatetime('2002-1-1');//此处字符串转换成日期时间的函数记不太清了,可能不是这样写的。
query1.sql.param[1] := strtodatetime('2002-12-31');
query1.active;
.....
结果没有找到一条记录,但数据库中却有在这段时间内的记录。
 
注意,Delphi中的strtodatetime转换的时间是从1970年00:00:00开始算起的秒数(也可能是1900年,记不太清了),他和Access数据库的日期时间表示法不同,需要转换
不知你用的什么数据库,了解一下你用的数据库的时间表示法,换算一下就行了
 
strtodate('2002-1-1');
 
不对!问题在于你的参数没有设置类型。
query1.sql.param[0].datatype:=ftDateTime;
 
query1.sql.param[0].asdate:=strtodate('2002-1-1');
 
谢谢各位的答案,问题已经解决。
我使用的是BDE+ACCESS2000,正确代码为:
strsql='select * from doc where recdate between :startdate and :enddate';
query1.close;
query1.sql.clear;
query1.sql.add(strsql);
query1.sql.params[0].asdatetime := strtodate('2002-1-1');//此处字符串转换成日期时间的函数记不太清了,可能不是这样写的。
query1.sql.params[1].asdatetime := strtodate('2002-12-31');
query1.active;
但我仍不解的是在strsql='select * from doc where recdate between :startdate and :enddate';中
的recdate不能加双引号"recdate",可我曾见书上这样写过。
 
"recdate" 这是常量而不是字段值,当然查无结果了
 
后退
顶部