计算字段求值???(100分)

  • 主题发起人 主题发起人 wangfu
  • 开始时间 开始时间
W

wangfu

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
if table1.fieldbyname('bzcs').asinteger<>0 then
table1.fieldbyname('fenshu').asfloat:=table1.fieldbyname('zccs').asinteger+table1.fieldbyname('bzcs').asinteger;
end;
对吗?
我事想对选择的所有记录, zccs/bzcs
然后求和,再求平均值
请指教
我给分!
 
没有else,结构不完整。
 
在计算字段中“我事想对选择的所有记录,然后求和,再求平均值”
你不怕死机。
 
你可以采用bookmark来判断当前的记录是否被选中,选中的就进行运.
 
我事想对选择的所有记录, zccs/bzcs
然后求和,再求平均值


对这种问题应该用SQL查询语句,或者ClientDataSet中的TAggregates来解决,或者用数据集
的遍历来解决,用计算字段肯定是不行的。
 
你的意思是对表中(dbgrid)中所有选择的记录进行求和然后再平均,还是对一条记录的两个字
段进行求和然后平均?
如果第一种可以用selected 字段,进行选择,然后进行求和平均
如果第二种就可以直接在sql语句中写,就根本不用计算字段
 
to 张剑波:
确实死机,但是有人没有关系的,所以我来问问,除法耗系统资源吗??
to TYZhang:
希望具体一点,谢谢!

对不起,大家,我一时马虎除了点问题
不是加号,是除号
我想先选择一定的符合条件的记录,当然用query.SQL
再,每条记录的zccs/bzcs得到结果x
然后在把整个 Query中的记录x 求和,在求平均值
运行死机
望指点
 
to wangfu:
引发procedure TForm1.Table1CalcFields(DataSet: TDataSet);的事件
的因素太多,如记录一移动就引发,而你在这里的算法包括整个表,太耗资源,
故死机。

总之思路不对。agree TYZhang 。
 
procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
if query.fieldbyname('bzcs').asinteger<>0 then
query.close;
query.sql.clear;
query.sql.add('select sum((a.zccs)/(a.bzcs)) as fenshu from table1 a');
也可以加query.sql.add('where bzcs<>"'+0+'"';
query.Open;
end;
没试,用了行马上说
 
楼上的兄弟的方法好像可以!
 
接受了答案
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部