下面是我写的报表打印。。因为SQL语句太长。。分行写就出错,网上找了下,写多个reportdy.ADOQuery1.sql.add()就没事了。。但是运行时出现了个问题:adoquery1:parameter '#start' not found,
这是什么原因呀?急。。
我之前只写了句简单的SQL语句,就没出现错误,这是SQL语句的原因吗?
procedure Treport.Button1Click(Sender: TObject);
begin
  reportdy.ADOQuery1.Close ;
  reportdy.ADOQuery1.sql.clear;
  reportdy.ADOQuery1.sql.add('select ABCD.书本编号,ABCD.书本名称,ABCD.数量 "初期结存数量",ABCD.金额 "初期结存金额",ABCD.进货数量 "本期进货数量",ABCD.进货金额 "本期进货金额",');
  reportdy.ADOQuery1.sql.add('ABCD.会员销售数量 "本期会员销售数量",ABCD.会员销售金额 "本期会员销售金额",');
  reportdy.ADOQuery1.sql.add('ABCD.非会员销售数量 "本期非会员销售数量",ABCD.非会员销售金额 "本期非会员销售金额",ABCD.期末结存数量,ABCD.期末结存数量*库存信息.进货单价 "期末结余金额" from 库存信息');
  reportdy.ADOQuery1.sql.add('FULL OUTER JOIN');
  reportdy.ADOQuery1.sql.add('(select ABCD.书本编号,ABCD.书本名称,ABCD.数量,ABCD.金额,ABCD.进货数量,ABCD.进货金额,ABCD.会员销售数量,ABCD.会员销售金额,');
  reportdy.ADOQuery1.sql.add('COALESCE(H.销售数量2,H.销售数量2,0) "非会员销售数量",COALESCE(H.销售金额2,H.销售金额2,0) "非会员销售金额",');
  reportdy.ADOQuery1.sql.add('ABCD.数量+ABCD.进货数量-ABCD.会员销售数量-COALESCE(H.销售数量2,H.销售数量2,0) "期末结存数量" from');
  reportdy.ADOQuery1.sql.add('(select ABCD.书本编号,ABCD.书本名称,ABCD.数量,ABCD.金额,ABCD.进货数量,ABCD.进货金额,COALESCE(G.销售数量1,G.销售数量1,0) "会员销售数量",');
  reportdy.ADOQuery1.sql.add('COALESCE(G.销售金额1,G.销售金额1,0) "会员销售金额" from');
  reportdy.ADOQuery1.sql.add('(select  ABCD.书本编号,ABCD.书本名称,ABCD.数量,ABCD.金额,COALESCE(F.进货数量,F.进货数量,0) "进货数量",COALESCE(F.进货金额,F.进货金额,0)"进货金额" from ');
  reportdy.ADOQuery1.sql.add('(select E.书本编号,E.书本名称,COALESCE(ABCD.数量,ABCD.数量,0) "数量",E.进货单价*COALESCE(ABCD.数量,ABCD.数量,0) "金额" from ');
  reportdy.ADOQuery1.sql.add('(select 书本编号,书本名称,MAX(进货单价) "进货单价" from 库存信息 group by 书本名称,书本编号) "E"');
  reportdy.ADOQuery1.sql.add('FULL OUTER JOIN');
  reportdy.ADOQuery1.sql.add('(select ABC.书本编号,COALESCE(ABC.数量,ABC.数量,0) - COALESCE(D.销售数量2,D.销售数量2,0) "数量" from');
  reportdy.ADOQuery1.sql.add('(select AB.书本编号,COALESCE(AB.数量,AB.数量,0) - COALESCE(C.销售数量1,C.销售数量1,0) "数量" from ');
  reportdy.ADOQuery1.sql.add('(select COALESCE(A.书本编号,A.书本编号,B.书本编号) "书本编号",COALESCE(A.库存数,A.库存数,0)+COALESCE(B.进货数量,B.进货数量,0) "数量" from ');
  reportdy.ADOQuery1.sql.add('(select 书本编号,sum(库存数) "库存数" from 库存信息 where  进货日期<:#start group by 书本编号) "A"');
  reportdy.ADOQuery1.sql.add('FULL OUTER JOIN');
  reportdy.ADOQuery1.sql.add('(select 书本编号,sum(进货数量) "进货数量" from 进货信息  where 进货日期<:#start group by 书本编号) "B"');
  reportdy.ADOQuery1.sql.add('ON A.书本编号=B.书本编号) "AB"');
  reportdy.ADOQuery1.sql.add('FULL OUTER JOIN');
  reportdy.ADOQuery1.sql.add('(select 书本编号,sum(销售数量1) "销售数量1" from 会员销售信息  where 销售日期<:#start group by 书本编号) "C"');
  reportdy.ADOQuery1.sql.add('ON AB.书本编号 = C.书本编号) "ABC"');
  reportdy.ADOQuery1.sql.add('FULL OUTER JOIN');
  reportdy.ADOQuery1.sql.add('(select 书本编号,sum(销售数量2) "销售数量2" from 非会员销售信息  where 销售日期<:#start group by 书本编号) "D"');
  reportdy.ADOQuery1.sql.add('ON ABC.书本编号 = D.书本编号) "ABCD"');
  reportdy.ADOQuery1.sql.add('ON E.书本编号 =ABCD.书本编号) "ABCD"');
  reportdy.ADOQuery1.sql.add('FULL OUTER JOIN');
  reportdy.ADOQuery1.sql.add('(select 书本编号,sum(进货数量) "进货数量",sum(进货金额) "进货金额" from 进货信息  where 进货日期 between :#start and :#end group by 书本编号) "F"');
  reportdy.ADOQuery1.sql.add('ON F.书本编号 =ABCD.书本编号) "ABCD"');
  reportdy.ADOQuery1.sql.add('FULL OUTER JOIN');
  reportdy.ADOQuery1.sql.add('(select 书本编号,sum(销售数量1) "销售数量1",sum(销售金额1) "销售金额1" from 会员销售信息  where  销售日期 between :#start and :#end group by 书本编号) "G"');
  reportdy.ADOQuery1.sql.add('ON G.书本编号 =ABCD.书本编号) "ABCD"');
  reportdy.ADOQuery1.sql.add('FULL OUTER JOIN');
  reportdy.ADOQuery1.sql.add('(select 书本编号,sum(销售数量2) "销售数量2",sum(销售金额2) "销售金额2"from 非会员销售信息  where 销售日期 between :#start and :#end group by 书本编号) "H"');
  reportdy.ADOQuery1.sql.add('ON H.书本编号 =ABCD.书本编号) "ABCD"');
  reportdy.ADOQuery1.sql.add('ON 库存信息.书本编号 =ABCD.书本编号');   reportdy.ADOQuery1.Parameters.ParamByName(' #start ').Value   :=   FormatDateTime('yyyy-mm-dd',DateTimePicker1.date);
   reportdy.ADOQuery1.Parameters.ParamByName(' #end ').Value   :=   FormatDateTime('yyyy-mm-dd',DateTimePicker2.date);
   reportdy.adoquery1.open;reportdy.Visible:=true;
report.Hide;reportdy.ADOQuery1.Active:=false;
reportdy.ADOQuery1.Active:=true;
reportdy.QuickRep1.Preview;
end;