这个sql语句怎么写?(50分)

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

freesoft

Unregistered / Unconfirmed
GUEST, unregistred user!
sql语句我都写好了。
with dataf.ADOQuery3 do
begin
close;
sql.clear;
sql.add('select a.jpid,(a.jpdj+b.jpdj) as jpdj,a.* from jpxs as a ,jplb as c, (select jpid,sum(dj) as jpdj from tp group by jpid) as b ');
sql.add('where a.jpid= b.jpid');
sql.add('and a.jplb=c.jplb');
sql.add('union (select jpid,jpdj,jpxs.* from jpxs ,jplb where jpxs.jplb=jplb.jplb and jpxs.cprq>=''''+datetostr(bbf.datetimepicker1.date)+'''' and jpxs.jpid not in (select jpid from tp ))');
sql.add('order by a.jpid');
open;
现在要求在form上填加两个datetimepicker,要求union前的jpxs的sj,tp的sj介于两者之间。
union后的jpxs的sj, 也在这两者之间。我试过可是有问题。故请大家帮忙!

 
在Sql字符串中,DataTimePicker的时间是这样写的吗:
'#'+FormatDataTime('yyyy-mm-dd hh:nn:ss',DateTimePicker1.datetime)+'#'
//上面是Sj字段是日期时间型的情况,如果是日期型,如下:
'#'+FormatDataTime('yyyy-mm-dd',DateTimePicker1.date)+'#'
如果不是这样写,自然会有错误。我估计你可能是日期字符前后的#号漏了。
 
好象还是不行,你能把具体一点的写出来吗?
我以前是这样写的
sql.add('where sj>='+''''+datetostr(datetimepicker1)+'''');
sql.add('and sj<='+''''+datetostr(datetimepicker2)+'''');
 
可能是 ''''(转意字符)出问题,用chr(39)试一下
 
>sql.add('where sj>='+''''+datetostr(datetimepicker1)+'''');
>sql.add('and sj<='+''''+datetostr(datetimepicker2)+'''');
干吗要datetostr? 直接写就可以了吗~
sql.add('where sj>='+''''+datetimepicker1.date+'''');
sql.add('and sj<='+''''+datetimepicker2.date+'''');

试一下~ 前提是sj字段是日期时间型的!
 
现在困难的是在union后的select语句内添加where条件。
报错说datetimepicker1,2不是表名。
 
jpxs.cprq>=:dttime
parambyname('dttime').asdatetime:=bbf.datetimepicker1.date
主要是跟踪一下,你的赋值是否正确
 
>>好象还是不行,你能把具体一点的写出来吗?
>>我以前是这样写的
>>sql.add('where sj>='+''''+datetostr(datetimepicker1)+'''');
>>sql.add('and sj<='+''''+datetostr(datetimepicker2)+'''');
这样改:
sql.add('where sj>='+'#'+FormatDataTime('yyyy-mm-dd hh:nn:ss',DateTimePicker1.datetime)+'#');
sql.add('and sj<='+'#'+FormatDataTime('yyyy-mm-dd hh:nn:ss',DateTimePicker2.datetime)+'#');

 
后退
顶部