在 DAO 记录集中使用事务
时 间:2022-01-29 09:03:12
作 者:杨雪 ID:42182 城市:南京
摘 要:事务是捆绑在一起并作为单个工作单元处理的一组操作。 事务中的工作必须当做整体完成;如果事务的任何部分失败,则整个事务都将会失败。
正 文:
事务这一概念使开发人员能够强制实施数据完整性。 由于绑定成一个单元的多个数据库操作要么全部成功,要么全部失败,因此数据库不会出现不一致的状态。 大多数数据库管理系统都使用事务。
最常见的事务处理示例包括银行的自动取款机 (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交流群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- Access快速开发平台企业版--...(11.18)
- 不会用多表联合查询,多表查询没结果...(11.16)
- 【案例分享】主键字段值含有不间断空...(11.16)
- Access快速开发平台--后台D...(11.14)
- 微软Access邀测新Monaco...(11.12)
- Access列表框左右互选、列表框...(11.11)
- 高效率在导入数据前删除记录(11.10)
- Access报价单转订单示例代码(11.08)
- Access系统自带的日期选择器不...(11.08)
- 分享一下Access工程中的acw...(11.07)