就是在DBGrid中填充完毕一行时,按键下就会出现一个新的空行
那么这时候我应该把刚才填充的那一行提交到数据库中,
这部分代码在哪个事件中?怎么写?这么说吧 ,我只要求输入前六个字段,最后一个余额字段是计算出来的。
怎么判断当前按了"下"键,或者在某行做了修改??图形请看这里 http://jinesc.6600.org/bbs/disp.asp?idd=30980&room=101

解决方案 »

  1.   

    就是在DBGrid中填充完毕一行时,按键下就会出现一个新的空行
    那么这时候我应该把刚才填充的那一行提交到数据库中,
    这部分代码在哪个事件中?怎么写?这么说吧 ,我只要求输入前六个字段,最后一个余额字段是计算出来的。
    怎么判断当前按了"下"键,或者在某行做了修改??图形请看这里 http://jinesc.6600.org/bbs/disp.asp?idd=30980&room=101
      

  2.   

    使用DBGrid元件主要是用来批量编辑数据后批量更新的,如果要一条一条的提交,可在DataSet元件(如TTable)的OnAfterPost事件中完成!
      

  3.   

    谢谢 : maozefa(之源) 
    请问如何取得DBGrid的第r行第c列的那个单元格的值呢?
      

  4.   

    dbgrid1.DataSource.DataSet.RecNo := r;//定位到第r行
    dbgrid1.DataSource.DataSet.Fields[c - 1].value//返回的为c列的值
      

  5.   

    dbgrid在换行的时候会自动提交,不必专门来做,相反,你若想不自动提交,就要设dataset的cancelupdate属性为true了。
      

  6.   

    你用什麼dateset就會有什麼方法做呀
      

  7.   

    要取得DBGrid的列的值(不等同DataSet字段)很简单:
        DBGrid1.Columns[i].Field.Value;
        但是要取得DBGrid多少行就不容易了,DBGrid屏蔽了这个属性,使用dbgrid1.DataSource.DataSet.RecNo 也是不准确的,本地数据表可以,对Database就难说了,要看特定的Database是否提供当前记录的序号。不过,提交当前数据记录可不考虑这个问题。
        有人说,DBGrid换行时自动提交,是不完全正确的,对本地表和简单的数据库程序可以,复杂远程数据库必须进行事务提交,对Midas程序更是如此。
      

  8.   

    学习,楼上所说的简单的数据库程序和复杂的数据库程序是怎么区分的,dbgrid怎么区分
      

  9.   

    这方面还真没研究过,这么说,在用dbgrid做数据修改时,开发人员还要根据数据库的实际情况决定是自动提交还是手动提交了。
      照你的意思说,dbgrid在复杂数据库时也是默认为换行提交的,只是数据库太复杂,数据库性能本来就不好,这时会在乎频繁提交所影响的数据库性能
      

  10.   

    TDBGrid元件每行编辑退出时,call DataSource.DataSet.Post,但是是直接Post到数据库,还是到缓冲区,就要看DataSet元件类型或者属性设置了,如果是Post到缓冲区,则必须手工提交数据到数据库。
        复杂的数据库程序往往同时涉及到若干个数据表的更新,有些数据表不是通过TDBGrid编辑的,但和TDBGrid关联的表有约束关系,所以DataSet只能Post到数据库缓冲区,然后将所有需要更新的表一次性更新(提交)到数据库。