在数据库中有 amount, outamount ,bcamount字段
在DBGrid中显示 amount, outamount ,leavamount,bcamount.
其中leavamount=amount-outamount(sql中实现);
    outamount=outamount+bcamount(程序中实现);
现在的问题是:由于数据库中没有leavamount字段,当我bcamount发生变化的时候,leavamount显示数据也随之发生了变化。
在bcamount的数据发生变化后,对DBGrid中的数据就需要保存。在保存的时候就会出现“Trying to modify_only field”
leavamount的数据只要在DBGrid上显示,不需要保存我想问的是:怎么解决leavamount对我保存的影响?

解决方案 »

  1.   

    leavamount不要在SQL中实现,设置它为一个计算字段,在OnCalcFields时间中给他赋值,就不会出现此种错误了
      

  2.   

    outamount=outamount+bcamount(程序中实现); 这就是在变动outamount字段
      

  3.   

    DBGrid增加计算字段,进行你的加加减减
      

  4.   

    OnCalcFields怎么触发不了?
    要设置那里?哪位给了例子啊
      

  5.   

    1.在数据集上新建字段leavamount为caculated型;
    2.在OnCalcFields里
    ado.fieldbyname('leavamount').asfloat=ado.fieldbyname('amount').asfloat-ado.fieldbyname('outamount').asfloat;
    显示时会自动触发该事件
      

  6.   

    另外,检查DateSet的AutoCalcFields,它要为true(缺省值)
      

  7.   

    在程序中实现,不要在SQL中实现
      

  8.   

    sql: select amount, outamount,bcamount from abc 
    cdssub:1,AutoCalcFields,它要为true
           2.双击cdsSub ,增加amount, outamount,bcamount为data ,leavamount为caculatedOnCalcFields事件:
       LSDBGridDetail.DataSource.DataSet.FieldValues['leavamount']:=LSDBGridDetail.DataSource.DataSet.FieldValues['amount']- LSDBGridDetail.DataSource.DataSet.FieldValues['outamount'];没有触发OnCalcFields事件