可以用Connect对象的三个方法实现
BeginTrans
开始事务
CommitTrans
提交事务
RollbackTrans
回滚事务如果你需要我可以把一个封装ADO常用功能的组件给你,可以很方便地实现

解决方案 »

  1.   

    要呀,要呀!
    谢谢!
    [email protected]
    还有我想问一下,这三个方法与所连的数据库有关吗???
    不同的数据库是不是都可以用它们???
      

  2.   

    mssql db2 和access 至少都支持的。其它我没试过
      

  3.   

    to Wind_LQ(风) 
    我也要一份,可以吗??谢谢
    [email protected]
      

  4.   

    BeginTrans、CommitTrans 和 RollbackTrans 方法范例
    该范例更改数据库的 Titles 表中所有心理学书籍的书籍类型。在 BeginTrans 方法启动事务将所有对 Titles 表的更改隔离后,CommitTrans 方法将保存更改。可使用 Rollback 方法撤销用 Update 方法保存的更改。Public Sub BeginTransX()   Dim cnn1 As ADODB.Connection
       Dim rstTitles As ADODB.Recordset
       Dim strCnn As String
       Dim strTitle As String
       Dim strMessage As String   ' 打开连接。
          strCnn = "Provider=sqloledb;" & _
          "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
       Set cnn1 = New ADODB.Connection
       cnn1.Open strCnn   ' 打开 Titles 表。
       Set rstTitles = New ADODB.Recordset
       rstTitles.CursorType = adOpenDynamic
       rstTitles.LockType = adLockPessimistic
       rstTitles.Open "titles", cnn1, , , adCmdTable
       
       rstTitles.MoveFirst
       cnn1.BeginTrans   '在记录集中循环并询问是否想要更改指定标题的类型。
       Do Until rstTitles.EOF
          If Trim(rstTitles!Type) = "psychology" Then
             strTitle = rstTitles!Title
             strMessage = "Title: " & strTitle & vbCr & _
             "Change type to self help?"         ' 更改指定雇员的标题。
             If MsgBox(strMessage, vbYesNo) = vbYes Then
                rstTitles!Type = "self_help"
                rstTitles.Update
             End If
          End If         rstTitles.MoveNext
       Loop   ' 询问用户是否想提交以上所做的全部更改。
       If MsgBox("Save all changes?", vbYesNo) = vbYes Then
          cnn1.CommitTrans
       Else
          cnn1.RollbackTrans
       End If   ' 打印记录集中的当前数据。
       rstTitles.Requery
       rstTitles.MoveFirst
       Do While Not rstTitles.EOF
          Debug.Print rstTitles!Title & " - " & rstTitles!Type
          rstTitles.MoveNext
       Loop   ' 恢复原始数据,因为这只是演示。
       rstTitles.MoveFirst
       Do Until rstTitles.EOF
          If Trim(rstTitles!Type) = "self_help" Then
             rstTitles!Type = "psychology"
             rstTitles.Update
          End If
          rstTitles.MoveNext
       Loop   rstTitles.Close
       cnn1.CloseEnd Sub
      

  5.   

    声明了ADO.COMMAND对象后,可以使用BeginTrans、CommitTrans 和 RollbackTrans 方法以及 Attributes 属性管理打开的连接上的事务,但数据源提供者支持则包括嵌套的事务。一般来讲,现在大多的关系型数据库都支持的,具体的看一下使用数据库的说明手册。你要是不放心ADO对你所用的数据库的事务支持,可以直接在数据库后台的存储过程(或其他类似)中使用事务处理。
      

  6.   

    BeginTrans、CommitTrans 和 RollbackTrans 方法 (ADO)
             这些事务方法按如下方式管理 Connection 对象中所处理的事务: BeginTrans 启动新的事务。
    CommitTrans 保存所有更改并结束当前事务。它也可以启动新事务。
    RollbackTrans 取消当前事务中所做的任何更改并结束事务。它也可以启动新事务。 
    语法level = object.BeginTrans()object.BeginTransobject.CommitTransobject.RollbackTrans返回值BeginTrans 可以作为函数调用,用于返回指示事务嵌套层次的长整型变量。参数object   Connection 对象。Connection如果希望以独立单元保存或取消对源数据所做的一系列更改,请使用这些具有 Connection 对象的方法。例如在货币转帐时,必须从帐户中减去某个数额并将其对等数额添加到另一个帐户。无论其中的哪个更新失败,都将导致帐户收支不平衡。在打开的事务中进行这些更改可确保只能选择进行全部更改或不作任何更改。注意   并非所有提供者都支持事务。需验证提供者定义的属性 Transaction DDL 是否出现在 Connection 对象的 Properties 集合中,如果在则表示提供者支持事务。如果提供者不支持事务,调用其中的某个方法将返回错误。一旦调用了 BeginTrans 方法,在调用 CommitTrans 或 RollbackTrans 结束事务之前提供者将不再立即提交所做的任何更改。对于支持嵌套事务的提供者来说,调用已打开事务中的 BeginTrans 方法将开始新的嵌套事务。返回值将指示嵌套层次:返回值为 1 表示已打开顶层事务(即事务不被另一个事务所嵌套),返回值为 2 表示已打开第二层事务(嵌套在顶层事务中的事务),依次类推。调用 CommitTrans 或 RollbackTrans 只影响最新打开的事务;在处理任何更高层事务之前必须关闭或回卷当前事务。调用 CommitTrans 方法将保存连接上打开的事务中所做的更改并结束事务。调用 RollbackTrans 方法还原打开事务中所做的更改并结束事务。在未打开事务时调用其中任何一种方法都将引发错误。取决于 Connection 对象的 Attributes 属性,调用 CommitTrans 或 RollbackTrans 方法都可以自动启动新事务。如果 Attributes 属性设置为 adXactCommitRetaining,提供者在 CommitTrans 调用后会自动启动新事务。如果 Attributes 属性设置为 adXactAbortRetaining,提供者在调用 RollbackTrans 之后将自动启动新事务。远程数据服务BeginTrans、CommitTrans 和 RollbackTrans 方法在客户端 Connection 对象上无效。