access查询时间段的问题
报错:不正常的定义参数对象,提供了不一致或不完整的信息
数据库是用的ACCESS!DT字段是时间日期型的。这段SQL语句在.net里测试过是没有错误的。不知道怎么到DELPHI7中就不行了
这是代码~大家帮忙分析下好么?谢谢了
function FBillManger():TDataSet;
var
dtshijian :string;
begin
adoyingyong.DataModule2.conn.Open;
adoyingyong.DataModule2.dt1.Connection:= adoyingyong.DataModule2.conn;
adoyingyong.DataModule2.dt1.CommandType:= cmdText;
dtshijian:= 'select * from bill where dt between #2000-12-12 12:12:12# and #2007-12-12 12:12:12# ';
adoyingyong.DataModule2.dt1.CommandText:= dtshijian;
adoyingyong.DataModule2.dt1.Active:=true;
result:= adoyingyong.DataModule2.dt1 ;
end;
[解决办法]
对于
dtshijian:= 'select * from bill where (dt > ' + # + '2000-12-12 12:12:12 ' + # + ') and (dt < ' + # + '2007-12-12 12:12:12 ' + # + ') ';
dtshijian:= 'select * from bill where (dt > ' + # + DateTimeToStr(Date1) + # + ') and (dt < ' + # + DateTimetoStr(date2) + # + ') ';
不好意思,没有测试.
测了以后发现dtshijian:= 'select * from bill where (dt > ' + '# 2000-12-12 12:12:12 # ' + ') and (dt < ' + '#2007-12-12 12:12:12# ' + ') ';也无法通过,因为ADOquery.open函数把2007-12-12 12:12:12总是作为两个字段来处理
不过这样可以通过:
dtshijian:= 'select * from bill where (dt > ' + FloatToStr(StrToDateTime( '2000-12-12 12:12:12 ')) + ') and (dt < ' + FloatToStr(StrToDateTime( '2007-12-12 12:12:12 ')) + ') ';
[解决办法]
如果是 MDB的日期时间型,刚好与 DELPHI的TDATETIME是相同的。当双精度数处理就可以。
[解决办法]
经过两个小时的奋斗,我又找了一种方法(其中的date1不需要声明):
Str := 'select * from bill where ldate > :date1 ';
ADOQuery1.SQL.Add(str);
ADOQuery1.Parameters.ParamByName( 'date1 ').Value := StrToDateTime( '2000-12-12 12:12:12 ');
ADOQuery1.Open;