以下这句SQL写到ADOQuery如何添加SELECT xm , bh , htje, ysfk , wsfk, xsrq , dh , bz  FROM owner  where zt = '未付清' 
UNION
SELECT '合计' AS xm, '1000' AS bh, SUM(htje)  ,  SUM(ysfk)  ,  SUM(wsfk)  , ' ' as xsrq, ' ' as dh, ' ' as bz  FROM owner  where zt = '未付清'
order by bh  
这样错在哪里?
     Datamodule2.ADOQueryReport.sql.clear;
     Datamodule2.ADOQueryReport.sql.add('SELECT xm, bh, htje, ysfk, wsfk, xsrq, dh, bz FROM owner where zt =:val0 UNION SELECT :val1 AS xm, :val2 AS bh, SUM(htje), SUM(ysfk), SUM(wsfk), :val3 as xsrq, :val4 as dh, :val5 as bz FROM owner  where zt =:val6 order by bh');
     Datamodule2.ADOqueryReport.Parameters[0].Value := '未付清';
     Datamodule2.ADOqueryReport.Parameters[1].Value := '合计';
     Datamodule2.ADOqueryReport.Parameters[2].Value := ' ';
     Datamodule2.ADOqueryReport.Parameters[3].Value := ' ';
     Datamodule2.ADOqueryReport.Parameters[4].Value := ' ';
     Datamodule2.ADOqueryReport.Parameters[5].Value := ' ';
     Datamodule2.ADOqueryReport.Parameters[6].Value := '未付清';
     Datamodule2.ADOQueryReport.Open;

解决方案 »

  1.   

    改为下面的试一试:
    Datamodule2.ADOQueryReport.sql.clear;
         Datamodule2.ADOQueryReport.sql.add('SELECT xm, bh, htje, ysfk, wsfk, xsrq, dh, bz FROM owner where zt =:val0 UNION SELECT :val1 AS xm, :val2 AS bh, SUM(htje), SUM(ysfk), SUM(wsfk), :val3 as xsrq, :val4 as dh, :val5 as bz FROM owner  where zt =:val6 order by bh');
         Datamodule2.ADOqueryReport.Parameters[0].Value := '''未付清''';
         Datamodule2.ADOqueryReport.Parameters[1].Value := '''合计''';
         Datamodule2.ADOqueryReport.Parameters[2].Value := ''' ''';
         Datamodule2.ADOqueryReport.Parameters[3].Value := ''' ''';
         Datamodule2.ADOqueryReport.Parameters[4].Value := ''' ''';
         Datamodule2.ADOqueryReport.Parameters[5].Value := ''' ''';
         Datamodule2.ADOqueryReport.Parameters[6].Value := '''未付清''';
         Datamodule2.ADOQueryReport.Open;
      

  2.   

    你可以看看在SQL事件探查器看看实际执行的SQL语句是怎样的,再把它放到查询分析器上看看哪里的错
      

  3.   

    Datamodule2.ADOQueryReport.sql.clear;
         Datamodule2.ADOQueryReport.sql.add('SELECT xm, bh, htje, ysfk, wsfk, xsrq, dh, bz FROM owner where zt =:val0 UNION SELECT :val1 AS xm, :val2 AS bh, SUM(htje), SUM(ysfk), SUM(wsfk), :val3 as xsrq, :val4 as dh, :val5 as bz FROM owner  where zt =:val6 order by bh');
         Datamodule2.ADOqueryReport.Parameters[0].Value := '未付清';
         Datamodule2.ADOqueryReport.Parameters[1].Value := '合计';
         Datamodule2.ADOqueryReport.Parameters[2].Value := ' ';
         Datamodule2.ADOqueryReport.Parameters[3].Value := ' ';
         Datamodule2.ADOqueryReport.Parameters[4].Value := ' ';
         Datamodule2.ADOqueryReport.Parameters[5].Value := ' ';
         Datamodule2.ADOqueryReport.Parameters[6].Value := '未付清';
         Datamodule2.ADOQueryReport.Open;把你的 Datamodule2.ADOqueryReport.Parameters[0].Value := '未付清'; parameters中的编号改写成变量名看看效果如何 这样写正常来说是没问题的 考虑看你的SQL语句本身是否有问题
      

  4.   

    回:三友SQL事件探查器查到的实际执行的SQL语句是这样的。exec sp_executesql N'SELECT xm, bh, htje, ysfk, wsfk, xsrq, dh, bz FROM owner where zt =@P1 UNION SELECT @P2 AS xm, @P3 AS bh, SUM(htje), SUM(ysfk), SUM(wsfk), @P4 as xsrq, @P5 as dh, @P6 as bz FROM owner  where zt =@P7 order by bh
    ', N'@P1 varchar(3),@P2 varchar(2),@P3 varchar(1),@P4 varchar(1),@P5 varchar(1),@P6 varchar(1),@P7 varchar(3)'查询分析器上分析出来是这样的。服务器: 消息 8178,级别 16,状态 5,行 0
    被准备语句 '(@P1 varchar(3),@P2 varchar(2),@P3 varchar(1),@P4 varchar(1),@P5' 需要参数 @P1,但未提供该参数。错在哪里啊。
      

  5.   

    如果我上面的不行,那你改为如下试一试:Datamodule2.ADOQueryReport.sql.clear;
         Datamodule2.ADOQueryReport.sql.add('SELECT xm, bh, htje, ysfk, wsfk, xsrq, dh, bz FROM owner where zt =:val0 UNION SELECT :val1 AS xm, :val2 AS bh, SUM(htje), SUM(ysfk), SUM(wsfk), :val3 as xsrq, :val4 as dh, :val5 as bz FROM owner  where zt =:val6 order by bh');
         Datamodule2.ADOqueryReport.Parameters.ParamByName('val0').Value := '未付清';
         Datamodule2.ADOqueryReport.Parameters.ParamByName('val1').Value := '合计';
         Datamodule2.ADOqueryReport.Parameters.ParamByName('val2').Value := ' ';
         Datamodule2.ADOqueryReport.Parameters.ParamByName('val3').Value := ' ';
         Datamodule2.ADOqueryReport.Parameters.ParamByName('val4').Value := ' ';
         Datamodule2.ADOqueryReport.Parameters.ParamByName('val5').Value := ' ';
         Datamodule2.ADOqueryReport.Parameters.ParamByName('val6').Value := '未付清';
         Datamodule2.ADOQueryReport.Active:=true;
      

  6.   

    编译是可以通过,但结果不对啊。结果是这样的。
    xm  bh  htje  ysfk  wsfk  xsrq      dh  bz
    合   0                    1900-1-1   正确的结果应该是有好几条记录,最后一个“合计”,不知道这个“合”是怎么来的。报错是没报错。
      

  7.   

    把参数去掉,全部换成SQL语句试试
    Datamodule2.ADOQueryReport.sql.add('SELECT xm, bh, htje, ysfk, wsfk, xsrq, dh, bz FROM owner where zt =''未付清'' UNION SELECT ''合计'' AS xm, '' '' AS bh, SUM(htje) as htje, SUM(ysfk) as ysfk, SUM(wsfk) as wsfk, '' '' as xsrq, '' '' as dh, '' '' as bz FROM owner  where zt =''未付清'' order by bh');
      

  8.   

    那说明条件不满足,至于那个'合'可能你在dbgrid里设置的宽度太小
      

  9.   

    回:Tensionli()
    你的方法是可以的,但有另一个问题:
    '' '' as xsrq  ,因为xsrq是日期型的,这句在SQL里执行的时候在‘合计’记录的‘xsrq’里显示的是“1900-1-1”,能不能不不让他显示,或者为空白。