基本组件:DBGRID1,ADOQUERY1,EDIT1
要求:
1、将满足条件的数据查询出来,显示在DBGRID里,并在DBGRID下方的合计栏里EDIT1.TEXT里显示所合计的金额,就是对列求和。
2、不是对行求和
3、不是对所有数据求和
4、要在DBGRID里显示全部字段,不是只显示金额项如:单据dh    金额je  经受人jsr    供应商GHS
    1001       100      小W     A公司
    1002       200      小Z    B公司
——-——————
   合计金额:300我原来的方法是:
1 先查询满足条件的数据
dm1.AQcgzz.SQL.Clear;
dm1.AQcgzz.SQL.Add('SELECT *');
dm1.AQcgzz.SQL.Add('FROM cgzwz');
dm1.AQcgzz.SQL.Add('where dh like ''%'+edit3.text+'%''');
dm1.AQcgzz.SQL.Add('and ghs='''+dblookupcombobox1.text+'''');
dm1.AQcgzz.SQL.Add('and jsr='''+edit4.text+'''');
dm1.AQcgzz.SQL.Add('order by dh');
dm1.AQcgzz.Open;
2 再统计
FOR 循环统计
缺点:数据多了,速度很慢,所以想改进。谢谢大哥们帮我看看。如何写代码。

解决方案 »

  1.   

    dm1.AQcgzz.SQL.Clear;
    dm1.AQcgzz.SQL.Add('SELECT *');
    dm1.AQcgzz.SQL.Add('FROM cgzwz');
    dm1.AQcgzz.SQL.Add('where dh like ''%'+edit3.text+'%''');
    dm1.AQcgzz.SQL.Add('and ghs='''+dblookupcombobox1.text+'''');
    dm1.AQcgzz.SQL.Add('and jsr='''+edit4.text+'''');dm1.AQcgzz.SQL.Add('UNION  SELECT ''合计'',SUM(je),NULL,NULL ');
    dm1.AQcgzz.SQL.Add('FROM cgzwz');
    dm1.AQcgzz.SQL.Add('where dh like ''%'+edit3.text+'%''');
    dm1.AQcgzz.SQL.Add('and ghs='''+dblookupcombobox1.text+'''');
    dm1.AQcgzz.SQL.Add('and jsr='''+edit4.text+'''');dm1.AQcgzz.SQL.Add(' order by dh');
    dm1.AQcgzz.Open;
      

  2.   

    补充:
    1 数据库:ACCESS2000
    2 DBGRID的属性:只读
    3 通过DBGRID的属性,已固定好要显示字段,隐藏了一些无用的字段
    4 实际AQCGZZ里有好几个字段,不只举例的4个(单号,金额je,经受人jsr,供应商GHS)问楼上大哥
    dm1.AQcgzz.SQL.Add('UNION  SELECT ''合计'',SUM(je),NULL,NULL ');这里的字段数是要跟数据库里cgzwz实际的一致,还是要跟显示在DBGRID里的字段一致?运行楼上的代码的错误信息:
    在联合查询中所选定的两个数据表或查询的列数不匹配
      

  3.   


    UNION  SELECT '合计',SUM(je),NULL,NULL 应该是与
    SELECT * 的列顺序一致(如果用*表示所有列,就是与数据库里的字段顺序一致)这里的关键是看ACCESS是否支持UNION的用法。
      

  4.   

    谢谢大哥!我测试了一下,基本还行,能否帮我改进一下啊。
    有2个需要改进:
    1、当SUM(sl)的时候,sl就是数量(数字类型字段)就出错。数量和金额一般都经常要进行汇总。
    2、能否不要在DBGRID里显示合计一栏,因我在DBGRID的下方用了EDIT1.TEXT保存该合计信息。
      

  5.   

    那你这样做吧,不要用Union了,把SQL分两步执行。
    先把合计取出来,把结果放在Edit1.text
    然后再取明细数据。
      

  6.   

    老兄,不太明白,可否留个QQ给我,给我指导指导。谢谢另外,如何结帖给分啊
    我的QQ:29742278
      

  7.   

    dm1.AQcgzz.SQL.Clear;
    dm1.AQcgzz.SQL.Add(' SELECT SUM(je) ');
    dm1.AQcgzz.SQL.Add('FROM cgzwz');
    dm1.AQcgzz.SQL.Add('where dh like ''%'+edit3.text+'%''');
    dm1.AQcgzz.SQL.Add('and ghs='''+dblookupcombobox1.text+'''');
    dm1.AQcgzz.SQL.Add('and jsr='''+edit4.text+'''');
    dm1.AQcgzz.Open;
    EDIT1.TEXT:=dm1.AQcgzz.Fields[0].AsString;
    dm1.AQcgzz.close;
    dm1.AQcgzz.SQL.Clear;
    dm1.AQcgzz.SQL.Add('SELECT *');
    dm1.AQcgzz.SQL.Add('FROM cgzwz');
    dm1.AQcgzz.SQL.Add('where dh like ''%'+edit3.text+'%''');
    dm1.AQcgzz.SQL.Add('and ghs='''+dblookupcombobox1.text+'''');
    dm1.AQcgzz.SQL.Add('and jsr='''+edit4.text+'''');
    dm1.AQcgzz.SQL.Add(' order by dh');
    dm1.AQcgzz.Open;
      

  8.   

    谢谢。测试通过。
    结贴。我另外有个问题,请大哥帮助。█ █ 紧急求教:如何利用SQL汇总,汇总结果显示在DBGRID里█ █
    http://community.csdn.net/Expert/topic/5337/5337540.xml?temp=3.710574E-02