我在DBGrid中某个地方修改了个值,我没点“保存”或什么,只是鼠标接着点DBGrid的另一条记录,我希望之前的修改是不被提交的,但是记录却变了,怎么能不这样,我试了好多方法都不行,我发现是在table1.beforeScroll之前就执行table1.post了,如果我在beforePost中写table1.Cancel,记录是没变了,但确报了个异常。   非常郁闷!请高手执教,多谢!

解决方案 »

  1.   

    DBGRID好像有这个自动保存的功能,关注
      

  2.   

    好像是不行的,ReadOnly好了,不允许修改
      

  3.   

    或者别用DBGrid,用StringGrid然后自己写更新的提交功能以及和数据库的链接
      

  4.   

    把ADODataSet的BATCHUPDATE 设置为真。这样调用post就不会提交到数据库。保存的地方调用UPDATEBATCH
      

  5.   

    用DataProvider和ClientDataset连,像多层的那种模式
      

  6.   

    呵呵,谢谢诸位大虾关怀,我试过了,因为在dbGrid上点别的记录后会触发post事件,我就在beforePost事件问用户是否要保存变化,如果不存则adoTable1.cancel;还一定要加上一句abort,否则在dbGrid上会看到虽然刚才那条记录不会变了,但却加了一条只包含刚才修改的字段内容其他字段全空着的这么一条记录,连beforeinsert都检测不到,不论最后是否已经提交到数据库了,视觉上总是很怪异,这点是我最郁闷的,(不信各位可以试一下,如果谁能处理的不发生这样的情况,一定要告诉我,)所以如果取消后,就不好意思,需要用户再点一次她刚才想点的那条记录了,但至少基本达到我的要求了。用不用updateBatch方式在用户操作时也有上面的怪异效果,只是它没有提交到数据库中。
      

  7.   

    在DataSoucre的AutoEdit设为false;