想自己编一个确认按钮,然后再把数据变更反映到数据库。
还包括一个取消按钮,可以进行数据回滚。但我用datagrid发现在这上面作的数据修改直接就反映到数据库了。本来想设置datagrid的allowupdate属性初始为false,通过确认按钮变为true,再update,发现又完全不能修改数据。

解决方案 »

  1.   

    我只到vb.net里是有离线的dataset的. vb6.0里面也有离线数据集吗?
      

  2.   

    打开记录集后 Set Recordset.ActiveConnection=Nothing
      

  3.   

    可是我原来没有用recordset,datagrid可以和adodb.recordset绑定么?
    不好意思,我水平比较菜。原先的代码是这样的:    strQuery = "Select * From info "    
        With Adodc1
          .ConnectionString = connstring
          .RecordSource = strQuery
        End With
        
        Set DataGrid1.DataSource = Adodc1
      

  4.   

    DataSource可以直接指定为Recordset
      

  5.   

    批处理方式可以解决你的问题!!(参考游标类型设置)还有一个方法是:
    添加或修改前,显式的加上一句启动事务的语句:
    conn.BeginTrans如果确认提交到数据库,则提交事务:
    conn.CommitTrans如果取消操作,则回滚事务:
    conn.RollbackTrans
      

  6.   

    To fj182(阿花) :打开记录集后 Set Recordset.ActiveConnection=Nothing 会产生3705错误:对象打开时,不允许操作. 你看我这么写是不是对? 谢谢了
            Set Recordset = New ADODB.Recordset
            Recordset.open strQuery, con, adOpenKeyset, adLockOptimistic
            Set Recordset.ActiveConnection = Nothing
            Set DataGrid1.DataSource = RecordsetTo yuvotesyg518:你的语句可以运行,但时不时地会报错.
    一个错误是
    ITransaction::Commit 或 ITransaction::Abort 被调用,并且对象处于 zombie 状态.
    还有个错误是
    Run-time errer '-2147217900(80040e14)':
    sp_cursoropen/sp_cursorprepare:语句参数只能是单个SELECT语句或单个存储过程.
    是不是要先检测conn.State? 
    谢谢
      

  7.   

    建议你用第一种方法,即批处理方式。设置记录的 LockType 属性为 adLockBatchOptimistic 
    详细情况请查看ADO的相关帮助
      

  8.   

    这种情况下,仅仅调用Update方法、Delete方法等更新操作不会反映到物理数据库。只有当调用了 UpdatePatch 方法后,对数据库所做的修改才会提交到物理数据库。