如何统计字段的累计值(50分)

  • 主题发起人 主题发起人 陈君凯
  • 开始时间 开始时间

陈君凯

Unregistered / Unconfirmed
GUEST, unregistred user!
一个表中有计划完成量,实际完成量,累计计划完成量,累计实际完成量等
几个字段,但用户输入计划完成量,实际完成量后能够统计出累计计划完成量,
累计实际完成量.例如
计划完成量,实际完成量,累计计划完成量,累计实际完成量
10 5 10 5
20 10 30 15
. . . .

. . . .

. . . .

. . . .

急等答案
 
CRAETE TRIGGER ON TABLE1
ON INSERT
AS
UPDATE inserted
SET 累计计划完成量 = 计划完成量 + C1,
累计实际完成量 = 实际完成量 + C2
FROM inserted,
(SELECT MAX(累计计划完成量) C1,MAX(累计实际完成量) C2 FROM TABLE1)
 

计划完成量,实际完成量,累计计划完成量,累计实际完成量
10 5 10 5
20 10 30 15


在输入一条新记录后:
如 计划完成量,实际完成量 累计计划完成量,累计实际完成量
100 25 ? ?

var
J_piror , S_piror : integer;
//上一条“累计计划完成量”,“累计实际完成量”
begin
Table1.prior ; //到上一条记录
J_piror :=Table1.fieldByName('累计计划完成量').AsInteger ;
S_piror :=Table1.fieldByName('累计计划完成量').AsInteger ;
Table1.next ; //回到新记录
Table1.edit ;
Table1.fieldByName('累计计划完成量').AsInteger:=J_piror +
Table1.fieldByName('计划完成量').AsInteger ;
Table1.fieldByName('累计实际完成量').AsInteger:=S_piror +
Table1.fieldByName('实际完成量').AsInteger ;
Table1.refresh ;
end ;

// OK


 
呵呵,我做过个比你的复杂多的。
在query 的 afterscroll中 sum 前面那两个字段就ok.
还弄不出来?
 
'累计计划完成量'和'累计实际完成量'两个字段保存在数据库中吗?
若保存,用afterscroll事件似乎不妥,难道每次scroll之后都重新
sum和post吗?应该在这两个字段的onchange事件中处理。
若不保存,则可把这两个字段new成计算型字段,在OnCalcFields事件
中sum。
 
用afterscroll则不可以以“累计计划完成量”和“累计实际完成量”进行排序
 
可以再设置个别的,按照输入顺序排序
(累计计划完成量和累计实际完成量当然是后面的结果大于前面的)
 
我觉得 OopsWare 的方法比较好;我有过类似的问题,
我的TRIGGER 是先选出MAX(累计计划完成量) ,MAX(累计实际完成量).
 
如果数据表是只添加的,我宁愿用 千中元的办法。
 
呵呵,我找到解决问题的方法了,但没用各位的办法,不好意思,但分数会加上的.
想知道我的巧妙解决办法吗?
 
你怎么解决的,不说??
 
是用了两个全局变量变量,xx,yy;
在窗体初始化时,xx:=0; yy:=0;
在按钮事件中加入如下代码:
with Form1.Tablel1 do
begin
edit;
first;
while not eof do
begin
xx:=xx+Fields[2].asinteger;
yy:=yy+fields[3].asinteger;
Fields[4].asinteger:=xx;
Fields[5].asinteger;=yy;
next;
edit;
end;
end;
 
后退
顶部