Access中日期字段查询参数怎样赋值啊?帮我看看这段代码,很简单的(200分)

  • 主题发起人 主题发起人 csgcsw
  • 开始时间 开始时间
C

csgcsw

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在程序中动态改变Tadodataset的commandtext,但对时间字段怎么都不行,清各位帮我看看。(数据库access2000)

var
strSql : AnsiString;
begin
strSql := ' select * from T_HRDocuments where ';
strSql := strSql + ' T_HRD_MadeDate >= #'+ FormatDateTime('yyyy-MM-dd hh:mm:ss',self.dtp_hrd_make1.DateTime)+'# ';
strSql := strSql + ' and T_HRD_MadeDate <= #'+ FormatDateTime('yyyy-MM-dd hh:mm:ss',self.dtp_hrd_make2.DateTime)+'#';
try
data.adods_hrd.DisableControls;
if data.adods_hrd.Active then
data.adods_hrd.Close;
data.adods_hrd.CommandText := strSql;
data.adods_hrd.Open;
finally
data.adods_hrd.EnableControls;
end;
end;

执行上述程序到data.adods_hrd.Open;时,提示“不正常地定义参数对象,提供了不一致或不完整地信息”


程序调试得到strSql为:
strSql: ' select * from T_HRDocuments where T_HRD_MadeDate >= #2003-04-16 00:00:00# and T_HRD_MadeDate <= #2003-07-16 23:59:59#'
将strSql中的sql语句拷到access中查询,可以得到正确结果。

请问为什么呀?程序中sql语句该怎样写啊?
 
请问数据库怎么连接的?是通过ODBC还是?
 
ACCESS好象有个怪毛病...
单用日期或单用时间查询没问题,如
>#2003-3-29# 或 <#21:36:00#
可以查询到,但日期时间合并在一起查就查不到了...

解决办法是使用参数查询
 
我上次也是出现这样的毛病,如果只用日期,没有时间结构就正确。
加上时间就不行。所以我干脆就没有用时间。
 
上次我吧日期转换成字符类型就解决了
 
去掉时间部分就行了
 
to csgcsw
是不是用Jet方式连的Access
 
我看了你的查询语句,没有必要要用到Time的,只要>#2003-04-15#,<#2003-07-17#,
不就可以了,如果一定要用到Time的话,可以在加上当天的时间限制,
如加上'or ( T_HRD_MadeDate = #2003-04-15 and T_HRD_MadeDate >= #12:12:12# )'
这样也可实现你要的功能,只不过麻烦了点,[:D]
 
datevalue(12:12:12)
 
可以使用参数赋值
 
连接用jet 4.0
adodataset1.Close;
adodataset1.CommandText:='select * from T_HRDocuments where T_HRD_MadeDate >:d1 and T_HRD_MadeDate <:d2';
adodataset1.Parameters.ParamByName('d1').Value:=FormatDateTime('yyyy-MM-dd hh:mm:ss',datetimepicker1.DateTime);
adodataset1.Parameters.ParamByName('d2').Value:=FormatDateTime('yyyy-MM-dd hh:mm:ss',datetimepicker2.DateTime);
adodataset1.Open;
实际上adodataset1.Parameters.ParamByName('xx').Value:=xxxxx 它的数据类型会自动转换。另外我在win2000+delphi6中实验通过。
 
这种问题的出现主要是由于系统日期显示格式和系统的格式不同所出现的,通过控制面板调整系统的日期显示格式问题就可以解决。
 
多人接受答案了。
 
后退
顶部