一个SQL语言问题(急!)(50分)

  • 主题发起人 主题发起人 fookk
  • 开始时间 开始时间
F

fookk

Unregistered / Unconfirmed
GUEST, unregistred user!
说明:TADOQuery控件的SQL语句为:
Select time,sum(qi),sum(pi),sum(person) from xfxx
where (time>=:f1) and (time<=:f2)
group by time order by time
查询结果为:时间>f1且<=f2 和查询语句的要求不服。
Why?Why?Why?Why?Why?
 
你是怎么赋值的?还有TIME是什么类型的字段?
 
请参考:
'Select time,sum(qi),sum(pi),sum(person) from xfxx '+
'where (time>='+''''+datetostr(datetimepicker1.date)+''''+')'+
'and (time<='+''''+datetostr(datetimepicker2.date)+''''+')';

 
请贴出你的赋值语句,这很重要
 
补充:adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select time,sum(qi),sum(pi),sum(person_no) from sfxx where (time>=:f1) and (time<=:f2) group by time order by time');
adoquery1.Parameters.ParamByName('f1').DataType:=ftdate;
adoquery1.Parameters.ParamByName('f2').DataType:=ftdate;
adoquery1.Parameters.ParamByName('f1').Value:=datetimepicker1.Date;
adoquery1.Parameters.ParamByName('f2').Value:=datetimepicker2.Date;
adoquery1.open;
 
adoquery1.Parameters.ParamByName('f1').DataType:=ftdate;
adoquery1.Parameters.ParamByName('f2').DataType:=ftdate;
adoquery1.Parameters.ParamByName('f1').Value:=datetimepicker1.Date;
adoquery1.Parameters.ParamByName('f2').Value:=datetimepicker2.Date;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
何必要用四句???
adoquery1.Parameters.ParamByName('f1').asdatetime:=datetimepicker1.Date;
adoquery1.Parameters.ParamByName('f2').asdatetime:=datetimepicker2.Date;
 
ADO中的值很怪的,一般不用时间进行查询,一般我们的查询都用日期.

我们的数据库中一般会用两个字段进行存储,一个是存日期,一个存日期+时间,这样好查询.

不过你可以试试不要用组合条件,用一个between.
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select time,sum(qi),sum(pi),sum(person_no) from sfxx where (time betwwen :f1 and :f2) group by time order by time');
adoquery1.Parameters.ParamByName('f1').Value:=datetimepicker1.Date;
adoquery1.Parameters.ParamByName('f2').Value:=datetimepicker2.Date;
 
between不行,有没有别的办法?
 
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select time,sum(qi),sum(pi),sum(person_no) from sfxx where (time>=:f1) and (time<=:f2) group by time order by time');
adoquery1.Parameters.ParamByName('f1').Value:=formatdatetime('yyyy/mm/dd',datetimepicker1.Datetime);
adoquery1.Parameters.ParamByName('f2').Value:=formatdatetime('yyyy/mm/dd',datetimepicker2.Datetime);
adoquery1.open;
不知成不成,試試。
再問一下你的time字段存的是日期,或是時間,或是日期與時間?
如存的僅是日期,用上句試試,
若是時間,則改為:formatdatetime(hh:mm:ss',datetimepicker1.Datetime);
若是日期與時間:formatdatetime('yyyy/mm/dd hh:mm:ss',datetimepicker1.Datetime);


 
借贵地一用。
select aa,sum(bb) from table1
where aa=:Tempaa
group by aa
打开此查询是报不是GROUP BY 表达式

select aa,sum(bb) from table1
where aa='11'
group by aa
打开则无此问题

 
问题在于你存放在数据中的time字段有时间值
table; time 31751.134
31751.134
所以你的条件就变成 >31751
就没有当天的记录,
应该为
f1 := datetostr(datetimepicker1.date-1)
f2 := datetostr(datetimepicker2.date)
 
对不起,说反了,应该是
问题在于你存放在数据中的time字段有时间值
table; time 31751.134
31751.134
所以你的条件就变成 <31751
就没有当天的记录,
应该为
f1 := datetostr(datetimepicker1.date)
f2 := datetostr(datetimepicker2.date+1)
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
860
import
I
I
回复
0
查看
2K
import
I
后退
顶部