我用的是ADODataset和datasource、dbgrid我做了"插入"、“删除”、“上一条”、“下一条”以及“确定”,但是往往是我进行“插入”之后就是不按“确定”随便点一个“上一条”和“下一条”它就把当前插入的这条数据保存了,请问我如何防止这一点,不然我得“确定”意义不大,而且用户很容易进行误操作。

解决方案 »

  1.   

    上一条,下一条就是:
    adodataset1.prior;
    adodataset1.next;
    我就是这样写的
      

  2.   


      这是ADODataset 功能,当你移动记录时,移动前的记录数据自动更新;如果你控制不更新,那你所新增的记录则会放弃掉(即 DBGrid 中不显示);
      解决方法:
      要使你的“确定”按钮达到预期使用效果,你可以使用临时表存储显示的内容,你怎么新增、修改、删除都可以,因它只是对临时表操作,当你单击“确定”按钮时,则把临时表中的数据正式更新数据库表,单击“取消”按钮时,重新从数据库表把数据装入临时表;
      

  3.   

    由TDataset继承下来的控件有一个叫buffer还是什么的属性,反正和他差不多可以设他为TRue,不过在完成后得使用applyupdata()提交
      

  4.   

    唉,一声叹息!一代不如一代了.
    //设为缓存更新模式
    adodataset1.LockType := ltBatchOptimistic;
    //真正保存到数据库
    adodataset1.UpdateBatch(arAll);
    //取消所有操作
    adodataset1.CancelBatch(arAll);
      

  5.   

    TO : wjk(wjk) 
    不客气的说,你完全是在胡说八道!
      

  6.   

    真是不好意思,boningsword(浩少)你说的这几条语句应该放在什么地方?
      

  7.   

    运用ado缓存更新,如果不UpdateBatch的化,是不会更新到数据库的,ado自动保存用的是post,不点UpdateBatch,重启或刷新的化就会消失。你可以在adodataset的afterpost事件中提示点‘确定’更新数据库。
      

  8.   

    运用ado缓存更新,如果不UpdateBatch的化,是不会更新到数据库的,ado自动保存用的是post,不点UpdateBatch,重启或刷新的化就会消失。你可以在adodataset的afterpost事件中提示点‘确定’更新数据库。
      

  9.   

    呵呵,楼上的朋友名字和我qq得很象哦,我qq里面是太阳雨,呵呵!
    BoningSword(【浩少】) 说得对!
      

  10.   

    参照adotable的数据集就可以,修改成为cursor改成clint就可以最后统一提交了,而且可以选择性的提交
      

  11.   

    “上一条”和“下一条”的点击事件中数据判断是否改变if AdoDataSet.State in [dsEdit, dsInsert] then
    if MessageBox(Handle, '记录已改变,是否保存?', '是否保存数据', MB_OKCANCEL+MB_ICONQUESTION) = ID_OK then
      BtnSave.Click
    else
      AdoDataSet.Cancel;AdoDataSet.Next;
      

  12.   

    BatchUpdate模式
    ADO的BatchUpdate功能和BDE/IDAPI的CachedUpdate非常类似。它的工作原理就是当ADO从数据源取得数据之后,客户端对于所有数据的修改都暂时储存在客户端的缓存中,而不是立刻更新回数据源中。而当客户端决定要把所有的修改更新回数据源时,才调用ADO的方法,把所有的修改更新回数据源中。
    注意:
    使用BatchUpdate方法来处理数据的好处是客户端和数据源之间不会产生密切的互动,因此可以降低数据源的负荷。此外也可以减少网络的Roundtrip,这在拥有大量客户端的应用系统中是非常有帮助的。此外由于BatchUpdate是把客户端对于数据的修改暂时储存在客户端内存中,因此它对于数据的修改动作非常快速,只在最后把所有的修改更新回数据源时才需要比较多的时间。不过使用BatchUpdate也有一些问题,那就是程序员必须撰写较多的程序代码来处理数据更新错误的情形。这是因为当客户端在修改数据时,可能已经有其他的用户改变了数据源中的数据,因此当客户端把修改的数据更新回数据源时便可能会发生数据冲突或是错误的情形。所以当程序员在使用BatchUpdate时,一定要搭配错误处理程序代码,才能够撰写出安全坚固的应用程序。要使用ADO的BatchUpdate功能,程序员必须在ADOExpress组件中进行一些必要的设定,才能够让ADO进入BatchUpdate的模式。下面就是进入BatchUpdate模式的必要设定:
    1  设定CursorType为KeySet或Static。
    2  设定LockType为BatchOptimistic。
    3  执行的SQL命令必须是Select。
    除此之外,CursorLocation也是程序员必须考虑的设定。虽然在Microsoft的文件中说明,BatchUpdate可以使用Server-SideCursor或Client-SideCursor。但是,如果使用BatchUpdate再搭配Server-SideCursor,那么不但无法使用Briefcase模型,在执行效率上也不好。
    4  设定CursorLocation为clUseClient。
    当ADO进入BatchUpdate模式时,所有对于数据的修改都是暂存在客户端中。当客户端决定把数据真正更新回数据源中时,可以调用TADODataSet、TADOQuery、TADOTable或TADOStoredProc组件的UpdateBatch方法。而UpdateBatch方法接受一个参数,这个参数代表客户端要把哪些修改的数据更新回数据源中。
      

  13.   

    BoningSword(【浩少】) 的正解,其中locktype在adodataset的properties里面设置即可,当然也可在程序进入时直接赋值,adodataset1.UpdateBatch(arAll);
    这句话写在你的保存按钮click事件里面,就是你的那个确定按钮click事件里面;adodataset1.CancelBatch(arAll);
    这句话写在你的取消按钮click事件里面;