若想使用SQL命令,筛选出位于一定时间段内的Record,为何如下命令不行,(100分)

  • 主题发起人 主题发起人 SolidSnake
  • 开始时间 开始时间
S

SolidSnake

Unregistered / Unconfirmed
GUEST, unregistred user!
若想使用SQL命令,筛选出位于一定时间段内的Record,为何如下命令不行,
--------------------------------------------------------------------------------
dstart:=strtodate(combobox1.text+'-'+combobox2.text+'-'+edit2.text);
dend:=strtodate(combobox3.text+'-'+combobox4.text+'-'+edit3.text);

with query1 do
begin
close;
sql.clear;
sql.add('select * from "jinhuo.db" where Date between :dates and :datee');
parambyname('dates').Value:=dstart;
parambyname('datee').Value:=dend;
open;
end;
--------------------------------------------------------------------------------
哪里有错误?应如何修改?十万火急!!!急盼您的回答!!!
 

parambyname('dates').AsDateTime:=dstart
 
不要用date做字段名,date是保留关键字
 
我试了以上代码没有任何问题
procedure TForm1.Button1Click(Sender: TObject);
var dstart:Tdatetime;
dend:Tdatetime;
begin
dstart:=strtodate(combobox1.text+'-'+combobox2.text+'-'+edit1.text);
dend:=strtodate(combobox3.text+'-'+combobox4.text+'-'+edit2.text);

with query1 do
begin
close;
sql.clear;
sql.add('select * from "events.db" where event_date between :dates and :datee');
parambyname('dates').Value:=dstart;
parambyname('datee').Value:=dend;
open;
end;

end;



你的错误提示是什么?
 
查询后,没有得到结果!(肯定有符合条件的记录)
 
用Database deskTop 可有数据?
 
当然有!!!
 
两个可能的错误已经被 R_Baggio 和 追命 指出来了。
还有一个要注意的是: dates>=datee
 
会不会你把日期搞错了?dStart>dEnd?
 
dstart := cbxMounth.Text + '/' + cbxDay.Text + '/' + cbxYear.Text;
dsEnd := cbxMounth1.Text + '/' + cbxDay1.Text + '/' + cbxYear1.Text;


with query1 do
begin
close;
sql.clear;
sql.add('select * from "jinhuo.db" where myDate Between ''' + dStart + ' and ' + dEnd + '''';
open;
end;

 
我记得对于Date类型的字段,用SQL语句时应在字段变量前加"#"号
试试看,我以前在VB中是这样用的。
 
Try this :

dstart:=combobox1.text+'-'+combobox2.text+'-'+edit1.text; //string type
dend:=combobox3.text+'-'+combobox4.text+'-'+edit2.text;
with query1 do
begin
close;
sql.clear;
sql.add('select * from "events.db" where string(event_date) between :dates and :datee');
parambyname('dates').AsString:=dstart;
parambyname('datee').AsString:=dend;
open;
end;
 
改用datetimepicker
 
BDE缺省的日期格式为“MM/DD/YY”(注意分隔符是“/”)
编程时必须用DecodeDate和EncodeDate函数拆分及组合成上诉的日期格式。
再引入到SQL查询中
 

1、如果Date 字段的数据类型是 string 型

select *
from jinhuo.db
where convert(datetime,date) between convert(datetime,:dateS)
and convert(datetime,dateE)

2、如果Date 字段的数据类型是 string 型

select *
from jinhuo.db
where date between convert(datetime,:dateS)
and convert(datetime,dateE)
 
sorry

>>2、如果Date 字段的数据类型是 string 型

改为 2、如果Date 字段的数据类型是 datetime 型
~~~~~~~~
 
谢谢大家!
有事请联络!
 
试试sqlbuilder吧.他会让你满意的
 
Local SQL 可以接受的日期格式与Delphi默认的日期格式不同,
应自己在程序中进行转换。查一下Local SQL Guide 对日期格式
的要求就明白了。
 
这样做肯定行.
用两个DateTimePicker,即DateTimePicker1和DateTimePicker2.
(而不用很多的ComboBox进行合成.)
将DateTimePicker1的Time设为:0:00:00
将DateTimePicker2的Time设为:23:59:59
dStart:=DateTimePicker1.DateTime;
dEnd:=DateTimePicker2.DateTime;
然后执行后面的程序.
 
后退
顶部