我的数据库是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控件时,无论怎么试都提示错误。
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控件时,无论怎么试都提示错误。
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;//正好手头有一个,给你参考下吧,我已经运行成功了
我的代码如下,请帮忙看看,为什么总无法通过:
**********************************************************************
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程序是正常的.请指点迷津!!!谢谢!!!
是连接oracle的部分有问题,要用oracle自己的客户端配置
因为我将
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 ');
就不会提示错误了