想做一个理财软件,但有一个功能一直困扰我.
功能如下,grid里有如下三条记录
ID 收入 支出 平衡
1 20 0 20
2 0 10 10
3 30 0 40
当把我把2条记录删除后,Grid显示如下
1 20 0 20
3 30 0 50最后面的一个字段是计算字段吗?如何实现这样的功能呢?
功能如下,grid里有如下三条记录
ID 收入 支出 平衡
1 20 0 20
2 0 10 10
3 30 0 40
当把我把2条记录删除后,Grid显示如下
1 20 0 20
3 30 0 50最后面的一个字段是计算字段吗?如何实现这样的功能呢?
可以在DBGrid的DataSet的AfterDelete事件中, 再將"平衡"重新計算一篇.平衡 = 上一記錄的平衡 + 本條的收入 - 本條的支出
private
{ Private declarations }
intIncome:Integer;
public
{ Public declarations }
end;var
TemplateForm1: TTemplateForm1;implementationuses uDataMdl;{$R *.dfm} procedure TTemplateForm1.qry1BeforeDelete(DataSet: TDataSet);
begin
intIncome:=qry1.fieldByName('Test').AsInteger;
end;procedure TTemplateForm1.qry1AfterDelete(DataSet: TDataSet);
begin
qry1.Edit;
qry1.fieldByName('收入').AsInteger:=qry1.fieldByName('收入').AsInteger+intIncome;
end;end.
create table testph(
ID int,
sr int,
zc int,
ph int)--插入数据
insert into testph values(1, 20, 0, 20)
insert into testph values(2, 0, 10, 10)
insert into testph values(3, 30, 0, 40)
insert into testph values(4, 5, 0, 45)--查询
select * from testph--删除id=2的记录
delete from testph where id=2--查询,得到所需要的结果
select id, sr, zc, (select sum(sr)- sum(zc) from testph where id <=a.id) as ph
from testph a--实现原理,当前的平衡=当前记录之前的所有收入-所有支出(包括当前记录)
但你可以考虑数据结转的方式,即到月底时把本月的数据结转!
如加个月份条件!
select id, sr, zc, (select sum(sr)- sum(zc) from testph where id <=a.id and yf='2005-08') as ph
from testph a where yf='2005-08'或加个结转条件!结转否jzf=0
select id, sr, zc, (select sum(sr)- sum(zc) from testph where id <=a.id and jzf=0) as ph
from testph a where jzf=0这样计算出的数据不会出错,
如果按 取上条记录的平衡数的方法,如果上条记录的平衡数有误,则会全部有误,如果修改中间一条记录,要影响到下面所有的平衡!
只代表个人想法,请参考!
把下面这段加进去就能实现你的需求:CREATE TRIGGER Tig_Name ON Table1
FOR DELETE
AS
BEGIN
DECLARE
@x int
Select @x = 平衡 From deleted
Update Table1 Set 平衡 = 平衡 + @x
Where
ID = (Select Max(ID) From Table1)
EndTable1 是你的表名.
FOR DELETE
AS
BEGIN
DECLARE
@x int
Select @x = 平衡 From deleted
Update Table1 Set 平衡 = 平衡 + @x
Where
ID = (Select Max(ID) From Table1)
End
大家还有什么更好的解决办法没有?