报错:不正常的定义参数对象,提供了不一致或不完整的信息数据库是用的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;

解决方案 »

  1.   

    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) + # + ')';
      

  2.   

    如果是写成这样就可以
    但是我想精确到秒啊dtshijian:= 'select * from bill where  dt between #2000-12-12# and #2007-12-12#';
      

  3.   

    重新Build一下程序,菜单Project->Build All Project
      

  4.   

    Date1:='2007-12-12 12:12:12';
    Date2:='2007-12-12 12:12:12';
    dtshijian:=Format('select * from bill where  dt between #%s# and #%s#',[Date1,Date2]);
      

  5.   

    对于 
    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'))  + ')';
      

  6.   

    dtshijian:= 'select * from bill where  (dt >' +  FloatToStr(StrToDateTime('2000-12-12 12:12:12')) + ') and   (dt <' +  FloatToStr(StrToDateTime('2007-12-12 12:12:12'))  + ')';这个可以的,我在我的电脑上测试通过了的
      

  7.   

    如果是日期时间类型的,直接用FloatToStr(datetime1)即可
      

  8.   

    垃圾 SQL ,不能输入时间常量。
      

  9.   

    如果是 MDB的日期时间型,刚好与 DELPHI的TDATETIME是相同的。当双精度数处理就可以。
      

  10.   

    经过两个小时的奋斗,我又找了一种方法(其中的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;
      

  11.   

    time:=ETime.Time - STime.Time;
        Decodetime(time,hour,min,sec,msec);
      

  12.   

    ADOQuery1.Parameters.ParamByName('date1').Value := StrToDateTime('2000-12-12 12:12:12');这不是另外一种方法,还是双精度数。只不过通过 Parameters传递参数罢了。