access时间字段难题.(100分)

子瑜

Unregistered / Unconfirmed
GUEST, unregistred user!
我用adoquery1查询access中的数据。连接数据库是通过odbc数据源方式。
现在出现一个问题。不知道为什么。
with ADOQuery1 do
begin
close;
sql.Clear;
Sqlstr:='Select * from testdt where '
+ 'Dt2>=#2001-01-01 12:12:12# and '
+'Dt2<=#2007-01-01 09:09:09# ' ;
sql.Add(Sqlstr);
open;
end; // with
1,以上一运行就提示‘不正常地定义参数对象,提供了不一致或不完整的信息’。
2,但是
把这段语句直接复制到delphi自带的SQL Explorer中执行没有任何问题。
3,还有,我把语句中的时分秒都去掉,在程序中也能运行。如下:
Sqlstr:='Select * from testdt where '
+ 'Dt2>=#2001-01-01# and '
+'Dt2<=#2007-01-01# ' ;

以上到底是怎么啦???
如何解决呀???
 
我想应该是你数据库里面的日期类型问题,你在access里面的是短日期把,那样就没办法跟带有小时分钟的日期比较了.
 
设置adoquery.ParamCheck = false
 
#号什么意思?
没用过,呵呵
我一直用'
试试
Sqlstr:='Select * from testdt where '
+ 'Dt2>='+Quotedstr('2001-01-01 12:12:12')+' and '
+'Dt2<='+Quotedstr('2007-01-01 09:09:09') ;
 
ADOConnection1.Open;
WITH ADOQuery1 do
begin
Close;
sql.Clear;
sql.Add('select * from 表1');
sql.Add('where dt between :p1 and :p2');
Parameters.ParamByName('p1').Value:=StrToDateTime('2006-06-07 9:48:36');
Parameters.ParamByName('p2').Value:=StrToDateTime('2006-06-07 9:48:49');
Open;
end;
以上代码经测试没有问题。
 
说明一下,使用#号得时候要特别注意,除非特别情况,另外有可能就是地域不同日期格式不同,
使用BETWEEN AND 和你得结果是完全相同的,而且效率比你的快,
在日期字段设置的使用常规日期字段。

如果不确定,管它那,使用参数赋值,日期转换留给ADO和ACCESS进行处理。
 
to:hityou 我所有日期类型都用过。也不行。
to: xf-wangyi access日期型字段你这写是不能通过的。我试了。
to: 蓝叶菱 你这样是可以的。我昨天就试了。是个正确的方法。但是我的程序涉及到我那种写法的地方实在太多,而且程序要用了。一下子在每个地方再像你这样方法,很要时间。我这个程序太大。
 
with ADOQuery1 do
begin
close;
sql.Clear;
Params.clear; //记不太清了,加上这一句还保险点
ParamCheck = false; //轻舞肥羊,说得对
Sqlstr:='Select * from testdt where '
+ 'Dt2>=#2001-01-01 12:12:12# and '
+'Dt2<=#2007-01-01 09:09:09# ' ;
sql.Add(Sqlstr);
open;
end; // with
 
哈哈哈哈哈。搞定了。
加个
ParamCheck := false;
 
谢谢各位相助,散分
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
979
SUNSTONE的Delphi笔记
S
S
回复
0
查看
799
SUNSTONE的Delphi笔记
S
顶部