我用的是delphi6,数据库是Access2002,当我查询一个时间的时候出错,请各位大侠帮忙。代码如下:  if (edit4.Text<>'') then
      with query1 do
         begin
            query1.Close;
            query1.SQL.Clear;
            query1.sql.add('select * from fawen where fw-riqi>:dad');
            query1.params[0].DataType:=ftdatetime;
            params[0].AsDateTime:=strtodate(edit4.text);
            prepare;
            query1.Open;
         end;出错代码如下project main_pro.exe raised exception class EDBEngineError with message 'General SQL error.
[Microsoft][ODBC Microsoft Access Driver] 参数不足,期待是3。多谢大家帮忙!!!!

解决方案 »

  1.   

    在Access中,查詢日期與時間,要在前面加'#'

    select * from tablename where datestart between #2005-04-25# and #2005-04-26#
      

  2.   

    用参数,参照:
    ~~~~~~~~~~~~~~~~~~~~~
    with adoquery1 do begin
      Close;
      SQL.Clear;
      SQL.Add('select * from fawen where 日期>=:startrq and 日期<=:endrq');
      Parameters.ParamByName('startrq').Value:=formatdatetime('yyyy-mm-dd',form1.DateTimePicker1.Date);
      Parameters.ParamByName('endrq').Value:=formatdatetime('yyyy-mm-dd',form1.DateTimePicker2.Date);
      Open;
    end;
      

  3.   

    楼上的说的对,ACCESS要用#把时间框起来,另外最好别用:参数形式,在程序里
    SQLSTRING:=‘select * from tablename where datestart between #’
                 +日期+‘# and #’+日期+‘#’比较好
      

  4.   

    我是这样写这个代码的:with adoquery1 do begin
      Close;
      SQL.Clear;
      SQL.Add('select * from fawen where 日期>=:startrq and 日期<=:endrq');
      Parameters.ParamByName('startrq').Value:=formatdatetime('yyyy-mm-dd',form1.DateTimePicker1.Date);
      Parameters.ParamByName('endrq').Value:=formatdatetime('yyyy-mm-dd',form1.DateTimePicker2.Date);
      Open;
    end;
    但是仍然出现错误信息:project main_pro.exe raised exception class EOleException with message 
    '[Microsoft][ODBC microsoft access driver] 参数不足,期待是4。‘我要查询的是动态的日期,是要求用户自己输入的,这样参数应该如何设置?
      

  5.   

    Paradox:
      'select * from aa where (EnterTime>='+''''+FormatDateTime('mm',EnterTimeDTP.DateTime)+
                '/'+FormatDateTime('dd',EnterTimeDTP.DateTime)+'/'+FormatDateTime('yyyy',EnterTimeDTP.DateTime)+
                ' 00:00:00:00'+''''+') ';
    Access:
    decodeDate(DateTimePicker1.DateTime,yyyy,mm,dd);
         tempsql:='select * from aa where 日期 Between '+'#'+inttostr(mm)+'/'+inttostr(dd)+'/'+inttostr(yyyy)+'# And ';
         decodeDate(DateTimePicker2.DateTime,yyyy,mm,dd);
         tempsql:=tempsql+'#'+inttostr(mm)+'/'+inttostr(dd)+'/'+inttostr(yyyy)+'#')
      

  6.   

    var2001(欢乐浪子)  
     
    SQLSTRING:=‘select * from tablename where datestart between #’
                 +日期+‘# and #’+日期+‘#’比较好 =====================
    简单好用。呵呵 
     
      

  7.   

    我试了一下,是我的ACCESS数据库的设置有一点点的问题,但我还是要多多感谢各位朋友的大力帮助和支持,谢谢!!!