DBGrid 特定列动态相加问题 本帖最后由 drsheldoncooper 于 2010-09-28 10:04:12 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不太明白你说的。如果仅仅是想在更新的时候动态的在Edit中显示金额求和的话,在更新后,用一个adoquery,with adoquery dobegin sql.clear; sql.text := 'select sum(金额) from table'; open;end;if not adoquery.IsEmpty then edit1.text := adoquery.fields.field[0].asstring; 我说的更新是指在缓存中更新,但还没有上存到数据库,所以搜索数据库的数据不是我现在dbgrid上的数据。 1.可用SQL處理;2.用語句去寫它的相關事件... 调用SQL语句好象会有2个问题。1、查找的对象,也就是from的问题。更新只是在缓存中更新,如果from 表名,只是数据库中原来的数据,不是现在更新后的数据。2、如果每次更新数据都保存到数据库中,那么每一次修改都要完成 保存数据、重新查询、重新定位记录 的过程,系统开销也很大。 記錄未提交前,不能執行遍歷,否則會自動提交。如果你想字段一修改,馬上顯示sum總和,那麼應該在 TField.OnChange事件中寫代碼。FieldSum , //這個值你在數據集 Open 通過遍歷時取得.TField.OnChange 事件 :FieldSum := FieldSum + (Field.Value - Field.OldValue) ; 就這樣做就行了。 这种方法我也曾经考虑,但Field修改一次按上面的方法计算正确,但第2次修改时,field.oldvalue还是那个field.oldvalue,结果就不正确了,最典型的例子:field.oldvalue是3,2次Field.Value都是4,实际上2次FieldSum应该不变,但按上式计算就改变了。现在想来可以设一个数组存放每一条记录的Field.Value,在下次计算中就能作为field.oldvalue使用,但不知道数组元素的序号和记录的序号怎么对应呢? 你可以解決這個問題的.只要多想一想TField.OnChange 事件 :tempSum := FieldSum + (Field.Value - Field.OldValue) ; Label1.Caption := tempSum ; DataSet.AfterCancel DataSet.AfterPost AfterDelete 事件更新加總值....調試一下,就能得到你想要的所見即所得. Delphi IDE 环境中运行程序慢的问题 简单问题如何互相比较ADOTable控件中的每个记录 image.canvas清屏问题 ADOTable的Filter属性中的‘字段=值’形式里面,‘值’要为所有可取值该如何写啊? 一个让我非常郁闷的问题,兄弟姐妹都来呀!!! 怎样在string中加入回车换行符? 是否有这样的与BitBtn控件稍不同的控件? access表的扩展名是什么啊 请关注,一定给分!!! 关于dbgrid与table绑定问题。 一个小数显示的问题 这是什么编码,如何进行编码
如果仅仅是想在更新的时候动态的在Edit中显示金额求和的话,在更新后,用一个adoquery,
with adoquery do
begin
sql.clear;
sql.text := 'select sum(金额) from table';
open;
end;
if not adoquery.IsEmpty then edit1.text := adoquery.fields.field[0].asstring;
我说的更新是指在缓存中更新,但还没有上存到数据库,所以搜索数据库的数据不是我现在dbgrid上的数据。
2.用語句去寫它的相關事件...
调用SQL语句好象会有2个问题。1、查找的对象,也就是from的问题。更新只是在缓存中更新,如果from 表名,只是数据库中原来的数据,不是现在更新后的数据。2、如果每次更新数据都保存到数据库中,那么每一次修改都要完成 保存数据、重新查询、重新定位记录 的过程,系统开销也很大。
TField.OnChange 事件 :FieldSum := FieldSum + (Field.Value - Field.OldValue) ; 就這樣做就行了。
这种方法我也曾经考虑,但Field修改一次按上面的方法计算正确,但第2次修改时,field.oldvalue还是那个field.oldvalue,结果就不正确了,最典型的例子:field.oldvalue是3,2次Field.Value都是4,实际上2次FieldSum应该不变,但按上式计算就改变了。
现在想来可以设一个数组存放每一条记录的Field.Value,在下次计算中就能作为field.oldvalue使用,但不知道数组元素的序号和记录的序号怎么对应呢?
TField.OnChange 事件 :tempSum := FieldSum + (Field.Value - Field.OldValue) ;
Label1.Caption := tempSum ; DataSet.AfterCancel DataSet.AfterPost AfterDelete 事件更新加總值....調試一下,就能得到你想要的所見即所得.