急用:日期的简单问题(30分)

  • 主题发起人 主题发起人 windflower
  • 开始时间 开始时间
W

windflower

Unregistered / Unconfirmed
GUEST, unregistred user!
我写的过程如下:
procedure TForm1.Button1Click(Sender: TObject);
var
date1,date2:tdate;
begin
date1:=strtodate('5/12/01');
date2:=strtodate('6/16/01');
showmessage(datetostr(date1));
with adoquery1 do
begin
with sql do
begin
close;
clear;
//text:='select * from 承付单表 where 付款日期 between :date1 and :date2';
text:='select * from 承付单表 where 付款日期 >=:date1 and 付款日期<=:date2';
end;
open;
end;
end;
怎么查询出来的是空值呢?明明有符合条件的记录。
此外,怎么给日期变量赋值呢?
谢谢。
 
你读取SQL语句参数的方法有问题,我帮你改了改,你再去试试。

procedure TForm1.Button1Click(Sender: TObject);
var
date1,date2:tdate;
begin
with adoquery1 do
begin
with sql do
begin
close;
clear;
//text:='select * from 承付单表 where 付款日期 between :date1 and :date2';
text:='select * from 承付单表 where 付款日期 >=:date1 and 付款日期<=:date2';
parambyname('date1').asdate:=strtodate('5/12/01');
parambyname('date1').asdate:=strtodate('6/16/01');
end;
open;
end;
end;
 
不对,系统提示parambyname undefined
 
参考一下这个:
adq.Close ;
adq.SQL.clear ;
adq.SQL.Add('select * from BRA_MOVEMENT where PostDate>= :Date1 and PostDate<=:Date2');
adq.Parameters.parambyname('Date1').value := date-199 ;
adq.Parameters.parambyname('Date2').value :=date+199 ;
adq.Prepare;
adq.Open ;
我的没问题的。
 
adq.Close ;
adq.SQL.clear ;
adq.SQL.Add('select * from BRA_MOVEMENT where PostDate>='+
''''+DATETOSTR(DATE1)+''''+' and PostDate<='+
''''+DATETOSTR(Date2)+'''';
adq.Open ;
 
兄弟,是不是日期格式不对?到控制面板里改一下试试.我常遇到这种问题.
 
多半是日期格式问题。注意在不通的操作系统版本下,例如在win98和win2000下,日期格式
和日期的处理方法都会不一样,同样是DateToStr,产生的结果就不一样。
xlwang的方法应该可以。
 
格式问题,看一下local sql help就可以搞定,以前遇到过
 
谢谢大家,各种方法我都尝试了一下:
procedure TForm1.Button1Click(Sender: TObject);
var
date1,date2:tdate;
begin
with adoquery1 do
begin
with sql do
begin
close;
clear;
text:='select * from 承付单表 where 付款日期>=:date1 and 付款日期<=:date2';
Parameters.parambyname('Date1').value :=strtodate('01-5-14');
Parameters.parambyname('Date2').value :=strtodate('01-5-20');
end;
open;
end;
end;
调试成功。
procedure TForm1.Button1Click(Sender: TObject);
var
date1,date2:tdate;
begin
with adoquery1 do
begin
with sql do
begin
close;
clear;
text:='select * from 承付单表 where 付款日期 between :date1 and :date2';
Parameters.parambyname('Date1').value :=strtodate('01-5-14');
Parameters.parambyname('Date2').value :=strtodate('01-5-20');
end;
open;
end;
end;
调试也成功。
procedure TForm1.Button1Click(Sender: TObject);
var
date1,date2:tdate;
begin
date1:=strtodate('01-5-14');
date2:=strtodate('01-5-20');
with adoquery1 do
begin
with sql do
begin
close;
clear;
text:='select * from 承付单表 where 付款日期>='''+datetostr(date1)+''' and 付款日期<='''+datetostr(date2)+'''';end;
open;
end;
end;
调试未成功,没有找到任何符合条件的记录。为什么呢?
 
query.sql.text =......(字符串拼结的sql)
后,ado或bde不会再去处理参数的

因为你机器上的日期格式不符合'01-5-14',所以就查不到


这种情况让引擎处理参数或者写符合设置的字符串都可以
 
to chenlh:如果是日期格式不对,那为什么前面两个对呢?
 
ACCESS中的SQL中,则日期格式如下就正确了
'select * from 承付单表 where 付款日期>=#2001-5-14# and 付款日期<=#2001-5-20#'
 
我的数据库是sql server.
 
to windflower

text:='select * from 承付单表 where 付款日期 between :date1 and :date2';
Parameters.parambyname('Date1').value :=strtodate('01-5-14');
Parameters.parambyname('Date2').value :=strtodate('01-5-20');
此sql语句经过引擎包装以后传到后台执行时时间格式已经是本机的设置了

而select * from 承付单表 where '付款日期>=01-5-14' and '付款日期<=01-5-20'
直接传sql语句就不一样了
 
sql server 2000的日期格式是有点古怪,我是这样搞定的:

付款日期 between '''+FormatDateTime('YYYY-MM-DD',DateTimePicker1.DateTime)+'''
and '''+FormatDateTime('YYYY-MM-DD',DateTimePicker2.DateTime)+'''

应该可以吧?
 
to 小芮:可以了。
to all: 谢谢!
 
多人接受答案了。
 
后退
顶部