想做一个理财软件,但有一个功能一直困扰我.
功能如下,grid里有如下三条记录
ID  收入   支出    平衡
1   20      0       20
2    0     10       10
3    30     0       40
当把我把2条记录删除后,Grid显示如下 
1   20     0       20
3   30     0       50最后面的一个字段是计算字段吗?如何实现这样的功能呢?

解决方案 »

  1.   

    在定义表字段的时候,把那个字段定义为计算字段即可....定义为int型,其标识选择“是”,默认的标识种子和标识递增量都为1,那么表中增加一条记录该字段会自动1的
      

  2.   

    樓上的好像看錯樓主的意思.我建議不要作為計算字段.
    可以在DBGrid的DataSet的AfterDelete事件中, 再將"平衡"重新計算一篇.平衡 = 上一記錄的平衡 + 本條的收入 - 本條的支出
      

  3.   

    //我只给出了收入的方法, 其它的一样了
    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.
      

  4.   

    好像不仅仅是删除记录时才计算只要是insert、update、delete的时候都要进行一遍更新平衡 = 上一记录的平衡+本记录的收入-本记录的支出。用视图试试吧。
      

  5.   

    --创建表
    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--实现原理,当前的平衡=当前记录之前的所有收入-所有支出(包括当前记录)
      

  6.   

    hqhhh(枫叶)的办法比较好,就是不知道数据量比较大的话,会不会影响速度.
      

  7.   

    数据量大当然会影响速度,
    但你可以考虑数据结转的方式,即到月底时把本月的数据结转!
    如加个月份条件!
    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这样计算出的数据不会出错,
    如果按 取上条记录的平衡数的方法,如果上条记录的平衡数有误,则会全部有误,如果修改中间一条记录,要影响到下面所有的平衡!
    只代表个人想法,请参考!
      

  8.   

    鼠标右键点击你的表 -> 所有任务 -> 管理触发器
    把下面这段加进去就能实现你的需求: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 是你的表名.
      

  9.   

    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)
    End
      

  10.   

    晕,我要使用的数据库是Access,不能用存储过程的.
    大家还有什么更好的解决办法没有?
      

  11.   

    同意  konhon(优华) 的方法
      

  12.   

    konhon(优华) 的方法并不好吧,还有人关注这个问题吗?