access中有一字段,字段名为“RDate”,类型为“日期/时间”,格式为“常规日期 yyyy-mm-dd hh:mm:ss”。在delphi中生成了一sql语句,如下
select * from masstab 
where (ModeKu='一号库') and (RDate between #2004-12-10 11:12:00# and #2004-12-10 14:12:00#)
运行时总是报错,“不正常的定义参数对象,提供了不一致或不完整的信息。”
但该语句在access下运行没任何问题。
请问是什么问题,怎么解决。

解决方案 »

  1.   

    delphi 下的查询语句是这个吗;
    'select * from masstab where (ModeKu=''一号库'') and (RDate between #2004-12-10 11:12:00# and #2004-12-10 14:12:00#)'
      

  2.   

    把时间去了是可以,我试过了。比如
    select * from masstab 
    where (ModeKu='一号库') and (RDate between #2004-12-9# and #2004-12-10#)
    但我的要求是需要日期和时间来查询,这问题怎么解决啊?
      

  3.   

    再说我在编译器中并没有带“:”。
    select * from masstab 
    where (ModeKu='一号库') and (RDate between #2004-12-10 11:12:00# and #2004-12-10 14:12:00#)
    这条语句是编译器生成后的语句,在delphi中我是这么写的
    sql := 'select * from masstab 
    where (ModeKu=''' + edit1.text + ''') and (RDate between #' + datetimetostr(datetime1) + '# and #' datetimetostr(datetime1) + '#)';
      

  4.   

    当作字符串后进行转换
    'select * from masstab 
    where (ModeKu=''一号库'') and (RDate between CDate(''2004-12-10 11:12:00'') and 
    CDate(''2004-12-10 14:12:00'')'
      

  5.   

    楼上的方法也试过了,也不行。
    另外我同样的代码在VB中运行成功,当然语法该了,但生成出来的sql语句完全一样。在VB下能运行通过,delphi下就不行。
    急啊,大家帮帮忙看看啊!
      

  6.   

    这样子就可以了!!
    select * from masstab 
    where (ModeKu='一号库') and (RDate between '2004-12-10 11:12:00' and '2004-12-10 14:12:00')
      

  7.   

    试试用参数呢
    select * from masstab 
    where (ModeKu='一号库') and (RDate between :date1 and :date2)
    Parameters.ParamByName('date1').value:=datetime1.datetime;
    Parameters.ParamByName('date2').value:=datetime2.datetime;
      

  8.   

    问题已经解决了,其实还是“:”惹的祸。
    解决方法是把参数验证关闭就行了。
    只加了一行代码
    qur.ParamCheck := false;当然按dh9450(谁有我菜) 的方法也行。
    谢谢各位了!