我想实现一个日期时间的范围查询,请帮忙。(50分)

  • 主题发起人 主题发起人 mylico
  • 开始时间 开始时间
M

mylico

Unregistered / Unconfirmed
GUEST, unregistred user!
我想实现一个日期时间的范围查询。我用了两个DateTimePicker控件,但是我查询的时候系统也不
报错,也能显示出DBGRID的字段,但就是显示不出值啊,这到底是怎么回事啊。
代码如下
procedure TForm1.Button1Click(Sender: TObject);
BEGIN
IF DTP1.DATE<DTP2.DATE THEN
BEGIN
SHOwMESSAGE('起始日期应小于终止日期!');
EXIT;
END;
QUERY1.CLOSE;
QUERY1.SQL.CLEAR;
QUERY1.SQL.ADD('SELECT * FROM reservat WHERE card_exp>=:RQ1 AND card_exp<=:RQ2');
QUERY1.PARAMBYNAME('RQ1').AsDate:=DTP1.DATE;
QUERY1.PARAMBYNAME('RQ2').AsDate:=DTP2.DATE;
query1.Prepare;
QUERY1.OPEN;
end;

我用的是(D6+PARADOX)
 
QUERY1.PARAMBYNAME('RQ1').AsDatetime
 
可能PARADOX中日期字段的格式和DateTimePicker日期格式不同。

你先看一下PARADOX已有数据中的日期字段的格式是什么?再
QUERY1.PARAMBYNAME('RQ1').Asstring:=formatdatetime('输出的日期格式',DTP1.DATE);

你试一下,如有误,请指教! [:)]
 
select * from x1
where xfield>'4/5/91'
 
保证格式符合BDE中的规定,缺省为月/日/年
 
你的程序没有问题,我用access就是这么做的。
 
若格式为月/日/年

QUERY1.PARAMBYNAME('RQ1').Asstring:=formatdatetime('mm"/"dd"/"yy',DTP1.DATE);
 
procedure TForm1.Button1Click(Sender: TObject);
var n,y,r:word;
ss:integer;
begin
try
strtoint(edit1.text);
strtoint(edit2.text);
except
showmessage('请输入正确的年龄');
edit1.Clear;
edit2.Clear;
exit;
end;
decodedate(now,n,y,r);
ss:=n;
//ss-strtoint(edit1.text);//获得出生年
//ss-strtoint(edit2.text);
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select xh,xm from sa where nl between :cs1 and :cs2');
adoquery1.Parameters.Parambyname('cs1').Value:=encodedate(ss-strtoint(edit2.Text),1,1);
adoquery1.Parameters.Parambyname('cs2').Value:=encodedate(ss-strtoint(edit1.Text),1,1);
open;
//label7.Caption:=adoquery1.Parameters.Parambyname('cs1').Value
end;
end;

delphi+sql sever通过
 
我一直使用张剑波的方法,对所有数据库有效(我没见过无效的)
 
select * from dbname where datetime=to_date('2001-10-1',"yyyy-mm-dd')
 
一定要用encodedate之类的日期解析出来,再补上合适的time(小于的补23:49,大于的补00:00)
 
我想
一、先存几个测试记录到数据库,然后看数据库的日期格式。
二、根据库中记录的日期格式,在编程时候进行匹配。
 
另类方法:
step 1. use encodedate() get yy,mm,dd from dtp.date
step 2. n1:=yy*10000+mm*100+dd
step 3. sql.add('select * from t1 where year(d1)*10000+month(d1)*100+date(d1)>=:p1');
parambyname('p1').asInteger := n1;
 
后退
顶部