基本组件: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、将满足条件的数据查询出来,显示在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 循环统计
缺点:数据多了,速度很慢,所以想改进。谢谢大哥们帮我看看。如何写代码。
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;
1 数据库:ACCESS2000
2 DBGRID的属性:只读
3 通过DBGRID的属性,已固定好要显示字段,隐藏了一些无用的字段
4 实际AQCGZZ里有好几个字段,不只举例的4个(单号,金额je,经受人jsr,供应商GHS)问楼上大哥
dm1.AQcgzz.SQL.Add('UNION SELECT ''合计'',SUM(je),NULL,NULL ');这里的字段数是要跟数据库里cgzwz实际的一致,还是要跟显示在DBGRID里的字段一致?运行楼上的代码的错误信息:
在联合查询中所选定的两个数据表或查询的列数不匹配
UNION SELECT '合计',SUM(je),NULL,NULL 应该是与
SELECT * 的列顺序一致(如果用*表示所有列,就是与数据库里的字段顺序一致)这里的关键是看ACCESS是否支持UNION的用法。
有2个需要改进:
1、当SUM(sl)的时候,sl就是数量(数字类型字段)就出错。数量和金额一般都经常要进行汇总。
2、能否不要在DBGRID里显示合计一栏,因我在DBGRID的下方用了EDIT1.TEXT保存该合计信息。
先把合计取出来,把结果放在Edit1.text
然后再取明细数据。
我的QQ:29742278
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;
结贴。我另外有个问题,请大哥帮助。█ █ 紧急求教:如何利用SQL汇总,汇总结果显示在DBGRID里█ █
http://community.csdn.net/Expert/topic/5337/5337540.xml?temp=3.710574E-02