事务处理是一个数据库术语,指的是将数据更改分组为一个原子单元的批处理过程。 整批事务都成功,或者全部失败。 交易的典型说明是在银行应用程序中将数据从一个帐户转移到另一个帐户。 您不希望您的原始帐户借记特定金额,发生错误,并且不希望将您的期末帐户记入贷方。
当涉及到DAO事务时,我们将处理Workspace对象的3个关键方法。 ADO Transactions虽然非常相似,但将在另一个提示中介绍。 下面简要介绍这3种方法:
- BeginTrans-标记应视为单个原子单位的一系列操作的开始。
- CommitTrans-接收自最近的BeginTrans以来的所有内容并将其写入磁盘。
- 回滚-与CommitTrans相反; 它会将您所做的所有更改撤消到最后一个CommitTrans。 这里的关键是全部。
On Error GoTo Err_Handler
Dim wrkCurrent As DAO.Workspace
Dim blnInTrans As Boolean 'are we in a Transaction?
blnInTrans = False 'not in a Transaction yet
Set wrkCurrent = DAO.DBEngine.Workspaces(0)
'...
wrkCurrent.BegingTrans
blnInTrans = True 'presently in a Transaction
'make all data modifications/changes here
wrkCurrent.CommitTrans
blnInTrans = False 'changes committed without an Error, Transaction is complete
'...
Err_Handler:
If blnInTrans Then 'was the Transaction successfully completed, or does it need to be Rolled back?
wrkCurrent.Rollback
End If
'continue Error Processing if necessary
使用DAO事务处理时的几个问题:
- 并非所有记录集都支持事务处理。 检查记录集的Transactions属性以查看其是否支持事务处理。
- 事务影响工作空间中所有数据更改。
- 您可以在Jet数据库中最多嵌套5个级别的事务。 内部事务必须在周围事务之前提交或回滚。
- 如果在未明确提交其事务的情况下关闭工作区,则所有未决事务将自动回滚。
From: https://bytes.com/topic/access/insights/671094-dao-transaction-processing-what