SQL语句中关于日期条件的问题(50分)

N

narduo

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库:SQL SERVER7.0
在执行以下语句时,提示不正确的日期类型:
with Query1 do
begin
CLOSE;
SQL.Clear;
SQL.Add('Select * From qinggou Where 请购日期 Between :qsrq And :jsrq');
ParamByName('qsrq').AsDate:=DateTimePicker1.Date;
ParamByName('jsrq').AsDate:=DateTimePicker2.Date;
Open;
end;
 
你定一的字段是否是date型?
 
字段名最好是用英文
SQL 的是日期时间型
还要注意一个问题:
假若你的查询语句写对了,比如你的QSRQ是2002-05-06,你将会查不到2002-05-06的数据,
你必须提前一天。
 
日期函数不能直接传过去,要先转换成字符串!
 
应该可以这样用吧,我好像也这样用过,不过我不是用的between,而是用的>xx,<xx
 
with Query1 do
begin
CLOSE;
SQL.Clear;
SQL.Add('Select * From qinggou Where 请购日期 Between ' +
DateToStr(DateTimePicker1.Date) + ' And ' +
DateToStr(DateTimePicker2.Date));
Open;
end;
 
asdatetime
 
因该先转换成字符
 
最好将DateTimePicker1.Date改为DateOf(DateTimePicker1.DateTime)。
我曾发现DateTimePicker1.Date还是带时间的。
DateOf是Delphi6才有的
 
先转换成字符

ParamByName('qsrq').AsDate:=formatdatetime('YYYY-MM-DD',datetimepicker1.date);
ParamByName('jsrq').AsDate:=formatdatetime('YYYY-MM-DD',datetimepicker2.date);
 
with Query1 do
begin
CLOSE;
SQL.Clear;
SQL.Add('Select * From qinggou Where 请购日期 Between :qsrq And :jsrq');
ParamByName('qsrq').AsDate:=trunc(DateTimePicker1.Datetime);
ParamByName('jsrq').AsDate:=trunc(DateTimePicker2.Datetime);
Open;
end;
 
不应该是AsDate,而是AsDateTime。
AsDate在PARADOX中可以,但在SQL SERVER中就出错。
听我的,我遇到过这个问题。
 
试试ParamByName('qsrq').Value
 
这样也可以的
SQL.Add('.....Where 请购日期 >=:qsrq');
SQL.Add(' and 请购日期<=:jsrq');
parambyname('qsrq').asstring:=datetostr(DateTimePicker1.date);
ParamByName('jsrq').asstring:=datetostr(DateTimePicker2.date);
 
顶部