我是delphi新手,在作个实验室信息管理系统,有个问题请大家帮帮忙啊 !tbl_sjhctk
入库日期  入库单号  品名代码  单价  数量  金额  有效期  操作者  供应商  发票号  批号 tbl_pmcx
品名代码(主键) 拼音码  品名  规格 组别 单位 厂商 批准文号我想生成一个汇总报表,生成的字段是:
品名  规格 单位 厂商 均价 汇总数量  汇总金额我是这样些代码的(delphi7.0 SQL 2005)
 先定义一个常量字符串
constSelect_hzbb ='select tbl_pmcx.品名,tbl_pmcx.规格,tbl_pmcx.单位,tbl_pmcx.厂商,tbl_sjhcrk.汇总数量,tbl_sjhcrk.汇总金额,tbl_sjhcrk.均价'
+' FROM dbo.tbl_pmcx RIGHT  JOIN'
+'( SELECT tbl_sjhcrk.品名代码, SUM(tbl_sjhcrk.数量) AS 汇总数量, SUM(tbl_sjhcrk.数量) / COUN(tbl_sjhcrk.数量) AS 均价, SUM(tbl_sjhcrk.数量) * (SUM(tbl_sjhcrk.数量) / COUNT(tbl_sjhcrk.数量)) AS 汇总金额 FROM tbl_sjhcrk  GROUP BY tbl_sjhcrk.品名代码)'
+' ON  tbl_pmcx.品名代码 = tbl_sjhcrk.品名代码';
constOrder='  ORDER BY dbo.tbl_sjhcrk.入库日期, dbo.tbl_sjhcrk.入库单号, dbo.tbl_pmcx.品名';后面的SQL执行代码是  //strWh是由自己写的一个函数生成的查询条件
函数为:(function TFm_rkcx.GetStrH(FldName:string;cboText:TComboBox):WideString;)
SQL.Add(constSelect +' where 入库日期  between :p0 and :p1' + strWh+ constOrder);
        parameters[0].Value:=DTP_qsrq.date;//起始日期
        parameters[1].Value:=DTP_jsrq.date;//结束日期执行时提示——关键字'ON'附近有语法错误

解决方案 »

  1.   

    right join () on在这个括号与on之间增加一个别名,比如 ' as SubQuery '
      

  2.   

    谢谢您的帮助!
    我按您的提示加了别名
    但有提示错误——无法绑定由多个部分组成的标识符 'tbl_sjhcrk.品名代码'
    这是什么意思,该怎么办呢
    谢谢!
      

  3.   

    const Select_hzbb = '  select tbl_pmcx.品名,'#13#10 +
                        '         tbl_pmcx.规格,'#13#10 +
                        '         tbl_pmcx.单位,'#13#10 +
                        '         tbl_pmcx.厂商,'#13#10 +
                        '         tbl_sjhcrk.汇总数量,'#13#10 +
                        '         tbl_sjhcrk.汇总金额,'#13#10 +
                        '         tbl_sjhcrk.均价'#13#10 +
                        ' FROM  dbo.tbl_pmcx '#13#10 +
                        '   RIGHT  JOIN' +
                        '     ( SELECT  tbl_sjhcrk.品名代码,'#13#10 +
                        '               SUM(tbl_sjhcrk.数量) AS 汇总数量,'#13#10 +
                        '               SUM(tbl_sjhcrk.数量) / COUN(tbl_sjhcrk.数量) AS 均价,'#13#10 +
                        '               SUM(tbl_sjhcrk.数量) * (SUM(tbl_sjhcrk.数量) / COUNT(tbl_sjhcrk.数量)) AS 汇总金额'#13#10 +
                        '       FROM  tbl_sjhcrk  '#13#10 +
                        '       GROUP BY tbl_sjhcrk.品名代码'#13#10 +
                        '     ) AS tbl_sjhcrk '#13#10 +
                        '     ON  tbl_pmcx.品名代码 = tbl_sjhcrk.品名代码';
    const Order=' ORDER BY '#13#10 +
                '       tbl_sjhcrk.入库日期,'#13#10 + //无效,group by之后没有出现'入库日期',需要去掉
                '       tbl_sjhcrk.入库单号,'#13#10 + //无效,group by之后没有出现'入库单号',需要去掉
                '       tbl_pmcx.品名';
      

  4.   

    我遇到个新问题,请帮我看下啥,谢谢!
    我想实现报表打印,使用delphi7,已经安装了QReport组件,但点击打印按钮时报错 
    代码如下: 
    procedure TFm_rkcx.BitBtn_dyClick(Sender: TObject); 
    begin 
    if DBG_rkcx.DataSource=DaSo_rkcxll then 
      begin 
        With Fm_rkcx_dy.ADOQry_mxbbdy do 
          begin 
            close; 
            SQL.Clear; 
            SQL.Add(constSelect_mxdy +' where 入库日期  between :p0 and :p1' + strWh + constOrder); 
            parameters[0].Value:=DTP_qsrq.date; 
            parameters[1].Value:=DTP_jsrq.date; 
            Active:=true; 
            ExecSQL; 
          end; 
        Fm_rkcx_dy.QReport.Print; 
      end; 
    end; 
    执行时报错——Access violation at address 00513BF3 in module 'Psjhcgl.exe'.Read of address 000002FC