数据库为paradox数据库,a_time为其中一个字段,类型为D,为什么下面语句无法执行啊,在SQL中都可以执行啊,var
ss:string;
begin
ss:='select * from cunkuanxinxi.db where a_time between '+datetostr(DateTimePicker1.date)+' and '+datetostr(DateTimePicker2.date);
with dm.query7 do begin
close;
sql.clear;
sql.Add(ss);
showmessage(ss);
open;
end;
ss:string;
begin
ss:='select * from cunkuanxinxi.db where a_time between '+datetostr(DateTimePicker1.date)+' and '+datetostr(DateTimePicker2.date);
with dm.query7 do begin
close;
sql.clear;
sql.Add(ss);
showmessage(ss);
open;
end;
ss:string;
begin
ss:='select * from cunkuanxinxi.db where a_time between '''+datetostr(DateTimePicker1.date)+''' and '''+datetostr(DateTimePicker2.date)+'''';
with dm.query7 do begin
close;
sql.clear;
sql.Add(ss);
showmessage(ss);
open;
end;
注:你要在SQL 语句中加上界定符‘
ss:string;
begin
ss:='select * from cunkuanxinxi.db where a_time between '+#39+datetostr(DateTimePicker1.date)+#39+' and '+#39+datetostr(DateTimePicker2.date)+#39+';
with dm.query7 do begin
close;
sql.clear;
sql.Add(ss);
showmessage(ss);
open;
end;
因为让某个字段在某一范围内时,这个变量必须用引号引起来,#39就代表''
ss:string;
begin
ss:='select * from cunkuanxinxi.db where a_time between '+#39+datetostr(DateTimePicker1.date)+#39+' and '+#39+datetostr(DateTimePicker2.date)+#39+';
with dm.query7 do begin
close;
sql.clear;
sql.Add(ss);
showmessage(ss);
open;
end;
因为让某个字段在某一范围内时,这个变量必须用引号引起来,#39就代表''
var
ss:string;
begin
ss:='select * from cunkuanxinxi.db where a_time between :rq1 and :rq2';
with dm.query7 do begin
close;
sql.clear;
sql.Add(ss);
sql.parambyname('rq1').value:=DateTimePicker1.date;
sql.parambyname('rq2').value:=DateTimePicker2.date;
// showmessage(ss);
open;
end;
可以是可以,但是如果要查询2003-3-25,(数据库中有2003-3-25的记录)时如果DateTimePicker1的时间选择为:2003-3-21日,DateTimePicker2的时间选择为:2003-3-26日,那么,记录为2003-3-25的记录就不会被查询出来,只有在你将DateTimePicker1或者DateTimePicker2的其中一个值选择为2003-3-25日的时候才会找到这条记录,我不明白这是什么原因啊!
不过你不要用between了,用where (rq>=:rq1) and (rq<=:rq2)试试。反正我都是这样用的。