日期段的查询问题?(100分)

  • 主题发起人 主题发起人 bigjader
  • 开始时间 开始时间
B

bigjader

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的是Acess,我在做日期段查询时用的是datetimepicker1控件,代码如下:
query1.Close;
query1.SQL.Add('select inputdate,liaohao,quantity');
query1.SQL.Add('from sunhao');
query1.SQL.Add('where inputdate>=:a1 and inputdate<=:a2 ');
query1.Params.ParamByName('a1').AsDatetime:=datetimepicker1.Date ;
query1.Params.ParamByName('a2').AsDatetime:=datetimepicker2.Date ;
query1.Prepare;
query1.Open;
在执行时,第一次执行时间段:2002-10-1 至2002-10-15时,结果执行正确,但在对日期进行第二次修改如时间段为2002-10-1 至2002-10-25时,执行查询出现错误如下:
inputdate>=Pa_Ram000 and inputdate<=Pa_Ram001, Pa_Ram000 ,Pa_Ram001 好象是指日期,但具体是什么呢?
谢谢!

 
把query1.SQL.Add('where inputdate>=:a1 and inputdate<=:a2 ');
改为query1.SQL.Add('where inputdate between :a1 and :a2 ');试试
 
query1.Close;

Query1.SQL.Clear;//这一句必须得写,否则SQL就重复了,

query1.SQL.Add('select inputdate,liaohao,quantity');
query1.SQL.Add('from sunhao');
query1.SQL.Add('where inputdate>=:a1 and inputdate<=:a2 ');
query1.Params.ParamByName('a1').AsDatetime:=datetimepicker1.Date ;
query1.Params.ParamByName('a2').AsDatetime:=datetimepicker2.Date ;
query1.Prepare;
query1.Open;
 
我试过了都不行!现在我改用了filter进行过滤!ok
 
query1.Prepare;注释掉呢?
 
query1.Close;
query1.clear;--------------
query1.SQL.Add('select inputdate,liaohao,quantity');
query1.SQL.Add('from sunhao');
query1.SQL.Add('where inputdate>=:a1 and inputdate<=:a2 ');
query1.Params.ParamByName('a1').AsDatetime:=datetimepicker1.Date ;
query1.Params.ParamByName('a2').AsDatetime:=datetimepicker2.Date ;
if not query1.prepare then query1.prepare;--------------
query1.Open;
 
最好是将带有从参数的SQL语句在设置SQL属性的时候加进去,然后还要在这个控件的
Parameters属性中,分别设置这两个从参数的类别,要选择TDate类型。
如果你一定要在语句中添加SQL语句,那么在参考前面几位的答案之后,还要在语句中设置
Parameters中的相应的属性。
 
twos是對的
query1.Prepare;這一行語句造成的問題,去掉,否則第二次執行肯定會出問題
 
prepare/unprepare;
 
query1.clear;
好象你那里缺了这一句,再试试吧
 
我一般不在代码里写带参数的SQL语句,因为:
1。参数最好还是给指定好数据类型,否则有可能出现莫名其妙的问题。
2。如果要动态查询,那还不如直接把你的两个日期写到SQL中,连参数都可以不用。

我的习惯是做东西用自己最熟悉的工具和代码,这样可以避免莫名其妙的问题,能够
完全控制程序。

大家切磋!

 
后退
顶部