首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

access查询时间段的有关问题

2012-02-09 
access查询时间段的问题报错:不正常的定义参数对象,提供了不一致或不完整的信息数据库是用的ACCESS!DT字段

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;

热点排行