在 DAO 记录集中使用事务-杨雪
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> Access数据库-模块/函数/VBA


在 DAO 记录集中使用事务

发表时间:2022/1/29 9:03:12 评论(0) 浏览(2540)  评论 | 加入收藏 | 复制
   
摘 要:事务是捆绑在一起并作为单个工作单元处理的一组操作。 事务中的工作必须当做整体完成;如果事务的任何部分失败,则整个事务都将会失败。
正 文:
事务这一概念使开发人员能够强制实施数据完整性。 由于绑定成一个单元的多个数据库操作要么全部成功,要么全部失败,因此数据库不会出现不一致的状态。 大多数数据库管理系统都使用事务。

最常见的事务处理示例包括银行的自动取款机 (ATM)。 分发现金然后将用户帐户记入借方的过程被视为一个逻辑工作单元并封装在一个事务中:除非系统也能够将帐户记入借方,否则不会分发现金。 通过使用事务,整个操作要么成功要么失败。 这样可以保持 ATM 数据库的一致状态。

如果希望确保一组操作中的每个操作在提交所有操作之前都成功,应考虑使用事务。 请记住,所有事务对其他事务都是不可见的。 也就是说,在提交事务之前,任何事务都看不到其他事务对数据库的更新。

备   注
Access 数据库的事务行为与 ODBC 数据源的行为不同,如SQL Server。 例如,如果数据库连接到文件服务器,而该文件服务器在事务提交其更改之前停止,则数据库会处于不一致的状态。 如果需要与持续性相关的真正事务支持,您应该使用客户端/服务器体系结构进行调查。

Access 数据库引擎通过 Workspace 对象的 DAO BeginTrans、CommitTrans 和 Rollback 方法支持事务。

下面的代码示例更改 Employees 表中所有销售代表的职务。 首先用 BeginTrans 方法启动一个事务,隔离对 Employees 表所做的全部更改,然后用 CommitTrans 方法保存更改。 请注意,可以使用 Rollback 方法撤消用 Update 方法保存的更改。

Sub ChangeTitle() 
 
Dim wrkCurrent As DAO.Workspace 
Dim dbsNorthwind As DAO.Database 
Dim rstEmployee As DAO.Recordset 
 
On Error GoTo ErrorHandler 
 
   Set wrkCurrent = DBEngine.Workspaces(0) 
   Set dbsNorthwind = CurrentDB 
   Set rstEmployee = dbsNorthwind.OpenRecordset("Employees") 
 
   wrkCurrent.BeginTrans 
   Do Until rstEmployee.EOF 
      If rstEmployee!Title = "Sales Representative" Then 
         rstEmployee.Edit 
         rstEmployee!Title = "Sales Associate" 
         rstEmployee.Update 
      End If 
      rstEmployee.MoveNext 
   Loop 
 
   If MsgBox("Save all changes?", vbQuestion + vbYesNo) = vbYes Then 
      wrkCurrent.CommitTrans 
   Else 
      wrkCurrent.Rollback 
   End If 
 
   rstEmployee.Close 
   dbsNorthwind.Close 
   wrkCurrent.Close 
 
   Set rstEmployee = nothing 
   Set dbsNorthwind = Nothing 
   Set wrkCurrent = Nothing 
 
   Exit Sub 
 
ErrorHandler: 
   MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description 
End Sub

使用事务时,指定的 Workspace 对象中所有数据库和 Recordset 对象都受到影响;事务是工作区的全局事务,而不是特定数据库或 Recordset 的全局事务。 如果对多个数据库执行操作或者在一个工作区事务内执行操作,则 Commit 和 Rollback 方法会影响事务过程中该工作区内更改的所有对象。

还可以将 BeginTrans、CommitTrans 和 Rollback 方法与 DBEngine 对象一 同使用。 在这种情况下,事务将应用于默认工作区,即 DBEngine.Workspaces(0) 。

Access软件网交流QQ群(群号:198465573)
 
 相关文章
理解SQL Server中事务日志的重要性  【UMVsoft整理  2006/7/28】
事务全攻略  【UMVsoft整理  2008/6/6】
浅谈SQL Server中的事务日志  【宋沄剑  2013/11/21】
BeginTrans、CommitTrans 和 Rollback...  【杜超-2号  2013/11/23】
SQL Server备份和还原全攻略, 完全备份,差异备份,增量备...  【缪炜  2015/11/15】
SQL SERVER事务处理   【缪炜  2016/9/25】
简单sql事务  【萤火虫  2018/6/8】
详解SQL Server中的事务与锁问题  【宏鹏  2018/7/4】
常见问答
技术分类
相关资源
文章搜索
关于作者

杨雪

文章分类

文章存档

友情链接