想在DBGrid中直接完成数据的添加、删除、修改等等操作,可是进行数据操作时一旦DBGrid的行与行之间的焦点发生转移,数据就会自动保存到数据库中去,请问有什么办法让焦点转移时也不提交数据,只有在点击了工具栏的保存按钮以后,才提交数据呢?还有如何判断DBGrid的Cell单元中输入的数据的合法性?

解决方案 »

  1.   

    query的locktype属性设置为ltBatchOptimistic以后 
    就必须的updatebatch才提交的 焦点离开也是不提交的post也是不行的 就的updatebatch
    就是缓存的机制的
      

  2.   

    同意angle097113(抵制日货,人人有责!)。用ltbatchoptimistic模式的话数据是存在客户端内存中的,只有updatebatch后才真正地提交到服务器数据库中去。
    判断DBGrid的Cell单元中输入的数据的合法性可以通过业务逻辑判断,如果你单指输入的合法性请把问题写清楚。
      

  3.   

    query有个beforepost不知能不能做写错误检查的代码。
      

  4.   

    楼主的意思是要批量更新,那你应该用ADOX!!
    赞同 angle097113(抵制日货,人人有责!) 的方法
      

  5.   

    to jingbianfc(:『静⊙变』:) 请问如何在服务器端定义数据完整性。刚刚接触数据库,还不明白怎么弄,还忘高手不吝赐教。
      

  6.   

    还有怎样得到用户输入到DBGrid的Cell单元格中的数据呢。
      

  7.   

    输入数据的合法性判断可以在ADO控件的beforepost事件中进行,若不合法就Abort
    但在变更行时就触发了
      

  8.   

    使用Query和UpdateSQL,用缓冲更新的方式,Post只在内存中修改,要使用ApplyUpdate才保存在数据库中
      

  9.   

    现在是我怎么得到办法得到在cell格中输入的数据呢??
    在调用ADOQuery的Append或者Insert方法后在DBGrid中会新添加一行,怎么得到这一行中输入的数据呢?
      

  10.   

    采用事务处理方式,对数据进行批量提交,同意: angle097113(抵制日货,人人有责!)  的观点其实大家说的很全了;
      

  11.   

    非常感谢各位高手,保存问题已经知道怎么处理了。
       在是我怎么得到办法得到在cell格中输入的数据呢??在调用ADOQuery的Append或者Insert方法后在DBGrid中会新添加一行,怎么得到这一行中输入的数据呢?
      

  12.   

    首先判断你当前在哪一列上,然后判断这一列的字段,然后用ADOQuery去访问这个字段的值,DBGrid只是一个前端,其值不会保存在表格自身,而是会赋给ADOQuery相应的字段值的
      

  13.   

    TO jabmoon(刺月) 不太明白你所说的意思,能再说得更明白一点吗?