在Access中,用ADO或DAO打开记录集之后,就可以开始事务 beginTrans SQL语句 。 。 。 commitTrans 在beginTrans与commitTrans之间的所有语句,只要有一句执行失败,所有已执行的语句都会不生效。这种常用在同时操作几个表的情况下使用,以免造成数据有关联的几个表的数据不相符。
事务用一句话来概括就是:全有或全无;要么全部生效,要么全部不生效。
------------------------------------------------------------------------------------- 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
' 打开连接。 Set strcnn=currentproject.connection 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.Close cnn1.Close
End Sub |