具体是这样的, 
   摘要  借方, 贷方  余额
   提现   100        100
   付款          20   80
   收入   200        280要求在改变借方,贷方的值时, 余额随之发生变化
例子 
   把提现 借方100 改变150 
结果就变成
  摘要  借方, 贷方  余额
   提现   150        150
   付款          20   130
   收入   200        330我想这个问题很有用?对大家也有很帮助?

解决方案 »

  1.   

    这个很简单,在记录集的字段对象OnChange作计算就可以了。即,借方/贷方值发生变化,计算余额。
      

  2.   

    和grideh有什么关系
    你可以在dataset.fields.onchange中
    写代码重新生成
    好象你也对业务不太清楚,一般流水是不允许改的
    新增或着冲红的方式
      

  3.   

    不是流水,有点像银行对账,lynmison  我如何获取上一个余额字段的数据 如果是同一记录的我知道用onCalcFields就能实现
      

  4.   

    先取当前记录行的改变以后的数据假如为i
    然后prior取数据假如为j
    再next然后根据借方和贷方是否为0判断j:=j+vale;
    一直到eof不就行了
      

  5.   

    hmserver其实已经给你答案了。
    1、编写事件
      procedure OnCalcBalance(sender: TField);
      begin
        当前记录集前移一条
        取出余额
        记录集.Next;
        while not 记录集.eof
        begin
          根据摘要,处理数据逻辑关系
          记录集.Next;
        end;
      end;2、初始化,在打开记录集的时候动态绑定
      procedure InitParam();
      begin
        打开记录集
        if 记录集.FindField('借方')<>nil then 记录集.FindField('借方').OnChange := OnCalcBalance;
        if 记录集.FindField('贷方')<>nil then 记录集.FindField('贷方').OnChange := OnCalcBalance;
        贷方
      end;
      

  6.   

    谢谢lynmison ,hsmserver  两位我选试试
      

  7.   

    为什么在dataset.fields.onchange事件执行 adoquery1.Prior; 就报stack overflow错误 
      

  8.   

    呵呵,不能写onchange中,那样肯定溢出的
      

  9.   

    借方和贷方是用户干预触发 OnChange 事件,怎么可能死循环导致堆栈溢出,是不是你在OnChange里头又设置该字段 的值?
    另外,检查一下你的程序,是不是用了 "余额" 的OnChange?
      

  10.   

    两位好心人,能在帮帮我吗?hsmserver 说不能在dataset.fields.onchange事件中写 adoquery1.prior;
    那要在那里写?
    代码贴出来,请帮我看看
    //借方字段的事件  我在这里先不减贷方数额
    procedure TForm1.ADOQuery1jyChange(Sender: TField);
    //var
    //    i,j:integer;
    begin
           //先上移一条
         adoquery1.Prior;
      //取出余额数
        i:=adoquery1.FieldByName('ye').AsInteger;//余额
        //下移一条,回到当前记录
        adoquery1.Next;
        while not adoquery1.eof  do
        begin
          //取出当前记录的金额
          j:=adoquery1.FieldByName('jy').AsInteger;
          adoquery1.Edit;
          //当前行记录余额等于 前一条记录金额(jy)加当前行记录余额(s)
          adoquery1.FieldByName('ye').Value:=i+j;
          //保存当前行记录的余额
          i:=adoquery1.FieldByName('ye').AsInteger;
          //记录下移
          adoquery1.Next;
        end;
    end;
    帮我看看,我实在太笨了,感谢两位,
      

  11.   

    加个提交按钮用来提交
    在onchang内不能改变记录指针