我的数据库是oracle,我要根据表的日期字段查询数据,于是在delphi的form里放置了两个DateTimePicker控件,以及ado等控件。sql语局很长,大约有20行(因为关联的表较多,条件也较多)with adoquery1 with 
close;
sql.clear;
sql.add('select * from exameTable where..... ');
sql.add('.....................................');
sql.add('.....................................');
sql.add('.....................................');
sql.add('.....................................');
sql.add('........................where .............');
sql.add('.....................................');
sql.add('.............appdate between ....这里怎么写.....and ......这里怎么写......');
//appdate--是日期型
paramByName('pdate').asdate:=DateTimePicker1.date;----这一句怎么写?
open;
...
end;
...
我试了一个下午,怎么试就是错误。如果在where的日期使用常量能正常运行,可是,使用DateTimePicker控件时,无论怎么试都提示错误。

解决方案 »

  1.   

    delphi的DateTimePicker非常头痛,我将我原来的程序里能正常运行的DateTimePicker的使用方法拷贝到我今天的程序里,可是无法通过。好气人。
      

  2.   

    var
    str:string;
    date1:string;
    begin
    str:=.......;
    str:=str+' where riqi <:endtime and riqi>:begintime order by riqi desc';
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add(str);
    date1:=datetostr(datetimepicker1.Date);
    adoquery1.Parameters.ParamByName('begintime').value:=strtodate(date1);
    date1:=datetostr(datetimepicker2.Date);
    adoquery1.Parameters.ParamByName('endtime').value:=strtodate(date1);
    adoquery1.open;//正好手头有一个,给你参考下吧,我已经运行成功了
      

  3.   

    当出现错误时,开始我还以为是delphi对sql语句的长度有限制(我的sql语句有20多行),后来将where子句的日期部分用常量代替能正常运行,因此,问题肯定出在datetimepick控件或该控件的类型转换上.
      

  4.   

    上午我试了,仍出现同样的错误.
    我的代码如下,请帮忙看看,为什么总无法通过:
    **********************************************************************
    procedure Tcj_list.Button1Click(Sender: TObject);
    var
    y_begin:string;
    y_end:string;
    sql_str:string;
    begin
      with adoquery1 do
          begin
          screen.Cursor:=crSQLWait;
          close;
          sql.Clear;
          sql.Add('select ................................,');
          sql.Add('........................................');
          sql.Add('........................................');
          sql.Add('........................................');
          sql.Add('........................................');
          sql.Add('........................................');
          sql.Add('........................................');
          sql.Add('........................................');
          sql.Add('........................................');
          sql.Add('........................................');
          sql.Add('........................................ FROM ........................................');
          sql.Add('........................................');
          sql.Add('........................................');      sql.Add('WHERE a.a_date between to_date(:y_begin,''yyyy/mm/dd'') and to_date(:y_end,''yyyy/mm/dd'') ');
          //sql.Add('WHERE a.a_date between to_date(''2005/11/17'',''yyyy/mm/dd'') and to_date(''2005/11/18'',''yyyy/mm/dd'')+1 ');      sql.Add('........................................');
          sql.Add('........................................');
          sql.Add('........................................');
          sql.Add(''........................................');
          sql.Add(''........................................');
          sql.Add(''........................................');
          {
          parameters.ParamValues['y_begin']:=DateToStr(yy_begin.Date);
          parameters.ParamValues['y_end']:=DateToStr(yy_end.Date+1);
          }
          parameters.ParamValues['y_begin']:=formatdatetime('yyyy/mm/dd',yy_begin.Date);
          parameters.ParamValues['y_end']:=formatdatetime('yyyy/mm/dd',yy_end.Date+1);      open;
          screen.Cursor:=crarrow;
      end;
    end;上面代码的sql语句很长.如果日期字段使用常量,则能正常运行,如果使用datetimepick控件则无法运行,提示下面错误信息:
    ora-01026:multiple buffers of size>4000 in the bind list奇怪的是,上面datetimepick的使用方法在其他delphi程序是正常的.请指点迷津!!!谢谢!!!
      

  5.   

    不是程序的问题,我也碰到过。试了好长时间才搞清楚原因。
    是连接oracle的部分有问题,要用oracle自己的客户端配置
      

  6.   

    你的数据源驱动程序肯定用的是Microsoft ODBC for Oracle,换Oracle自带的就可以了
      

  7.   

    仍出现 ora-01026:multiple buffers of size>4000 in the bind list错误 ,哪里可以找到 Microsoft ODBC for Oracle
      

  8.   

    可能不是odbc问题,
    因为我将
        sql.Add('WHERE a.a_date between to_date(:y_begin,''yyyy/mm/dd'') and to_date(:y_end,''yyyy/mm/dd'') ');
    改成(日期改成常量):
          sql.Add('WHERE a.a_date between to_date(''2005/11/17'',''yyyy/mm/dd'') and to_date(''2005/11/18'',''yyyy/mm/dd'')+1 ');
    就不会提示错误了