设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

1970-1-1 08:00| 发布者: ec| 查看: 2343| 评论: 0

在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

最新评论

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-29 05:27 , Processed in 0.069512 second(s), 16 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回顶部