此頁沒有內(nèi)容條目
內(nèi)容

BeginTrans、CommitTrans 和 RollbackTrans 方法范例

該范例更改數(shù)據(jù)庫的 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

   ' 在記錄集中循環(huán)并詢問是否想要更改指定標題的類型。

   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

   ' 打印記錄集中的當前數(shù)據(jù)。

   rstTitles.Requery

   rstTitles.MoveFirst

   Do While Not rstTitles.EOF

      Debug.Print rstTitles!Title & " - " & rstTitles!Type

      rstTitles.MoveNext

   Loop

   ' 恢復原始數(shù)據(jù),因為這只是演示。

   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.Close

End Sub