会员登录 - 用户注册 - 网站地图 Office中国(office-cn.net),专业Office论坛
当前位置:主页 > 技巧 > Access技巧 > DAO/ADO/ADP > 正文

使用ADO或DAO如何进行事务处理?

时间:2003-12-06 20:25 来源:ACCESS911 作者:ec 阅读:

在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

(责任编辑:admin)

顶一下
(0)
0%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价: