如果您使用.BeginTrans并且不使用.CommitTrans或.Rollback会发生什么

时间:2013-04-03 11:28:58

标签: vba ms-access

如果您使用.BeginTrans和.Execute,那么您会在Access VBA中的.CommitTrans或.Rollback之前退出代码。

1 个答案:

答案 0 :(得分:2)

丹尼尔的评论几乎总结了一下。当我运行以下代码时......

Sub noCommit()
Dim cdb As DAO.Database, rst As DAO.Recordset
Set cdb = CurrentDb
Set rst = cdb.OpenRecordset("tblSampleData", dbOpenTable)
DBEngine.Workspaces(0).BeginTrans
rst.Edit
rst!Item = "Item1amended"
rst.Update
'' no Commit and no Rollback
End Sub

...然后在数据表视图中打开表格,任何编辑两个记录中的任何一个的尝试都会在记录选择器上产生“哔”和“无条目”图标。

noEntry

尝试添加新记录时遇到“无法更新”错误:

couldNotUpdate

因此,不会写入事务中所做的更改,并且表将保持锁定状态,直到连接关闭(或事务被清除)。由于我的交易基于默认的Access连接(DBEngine.Workspaces(0)),这意味着关闭和重新打开Access,或运行以下内容:

Sub transRollback()
DBEngine.Workspaces(0).Rollback
End Sub