如何在事务期间访问更新的 DAO 记录集属性?
How to access updated DAO recordset properties during a transaction?
我正在 Access 中开发一个应用程序,它使用 DAO 中的事务处理。我使用 class 来表示要从另一个来源导入的数据体。除其他事项外,这个 class 包含一个记录集字典,每个记录集都添加了一条新记录或编辑了一条现有记录,具体取决于是否存在具有相同主键的另一条记录。我从普通代码模块中的另一个过程创建了此 class 的一个实例,并使用 class 的属性和方法来执行分析并完成数据提取。
在一个过程中,我想随后为每个记录集编辑最近添加或编辑的记录,以便通过 class' 方法增加已经对这些记录执行的操作。问题是在事务开始处理后 .Recordcount 属性 似乎在事务提交之前不会更新,而且看起来我无法为 newly-added/edited 设置书签提交前记录。后一个问题在尝试为刚刚添加的记录设置书签时引发 "No Current Record" 错误(Recordcount 属性 仍为 0)。
我的理解是否正确,即 DAO 书签不是一种在提交事务之前调用可能已添加的记录的可行方式?还有其他更好的方法吗,或者有人有任何其他建议吗?
如果您需要引用记录但无法通过书签引用,请使用变体类型的静态数组挂在数据上。使用数组中的一个元素作为各种书签。要处理数组以找到您的书签,请在数组中保留一个带有书签索引值的静态变量。
希望对一些人有所帮助。
事实证明,虽然 .Bookmark 属性 在交易期间不可用,但 .LastModified 属性 可用,它是指向我无论如何都想访问的记录的书签指针。我只是从:
Private Sub Test()
dim vBookmark as Variant
dim wsp as Workspace
dim rs as DAO.Recordset
dim rs2 as DAO.Recordset
set wsp = DBEngine.Workspaces(0)
set rs = CurrentDB.OpenRecordset("TableName", dbOpenTable)
wsp.BeginTrans
'... Make some record active
vBookmark = rs.Bookmark
'Note: ^ Error is thrown here when recordset has 0 records
'... Later
set rs2.Bookmark = vBookmark
wsp.CommitTrans
End Sub
为此:
Private Sub Test()
dim vBookmark as Variant
dim wsp as Workspace
dim rs as DAO.Recordset
dim rs2 as DAO.Recordset
set wsp = DBEngine.Workspaces(0)
set rs = CurrentDB.OpenRecordset("TableName", dbOpenTable)
wsp.BeginTrans
'... Make some record active
vBookmark = rs.LastModified
'Note: ^ Correctly stores bookmark even during an uncommitted transaction
'... Later
set rs2.Bookmark = vBookmark
wsp.CommitTrans
End Sub
我正在 Access 中开发一个应用程序,它使用 DAO 中的事务处理。我使用 class 来表示要从另一个来源导入的数据体。除其他事项外,这个 class 包含一个记录集字典,每个记录集都添加了一条新记录或编辑了一条现有记录,具体取决于是否存在具有相同主键的另一条记录。我从普通代码模块中的另一个过程创建了此 class 的一个实例,并使用 class 的属性和方法来执行分析并完成数据提取。
在一个过程中,我想随后为每个记录集编辑最近添加或编辑的记录,以便通过 class' 方法增加已经对这些记录执行的操作。问题是在事务开始处理后 .Recordcount 属性 似乎在事务提交之前不会更新,而且看起来我无法为 newly-added/edited 设置书签提交前记录。后一个问题在尝试为刚刚添加的记录设置书签时引发 "No Current Record" 错误(Recordcount 属性 仍为 0)。
我的理解是否正确,即 DAO 书签不是一种在提交事务之前调用可能已添加的记录的可行方式?还有其他更好的方法吗,或者有人有任何其他建议吗?
如果您需要引用记录但无法通过书签引用,请使用变体类型的静态数组挂在数据上。使用数组中的一个元素作为各种书签。要处理数组以找到您的书签,请在数组中保留一个带有书签索引值的静态变量。
希望对一些人有所帮助。
事实证明,虽然 .Bookmark 属性 在交易期间不可用,但 .LastModified 属性 可用,它是指向我无论如何都想访问的记录的书签指针。我只是从:
Private Sub Test()
dim vBookmark as Variant
dim wsp as Workspace
dim rs as DAO.Recordset
dim rs2 as DAO.Recordset
set wsp = DBEngine.Workspaces(0)
set rs = CurrentDB.OpenRecordset("TableName", dbOpenTable)
wsp.BeginTrans
'... Make some record active
vBookmark = rs.Bookmark
'Note: ^ Error is thrown here when recordset has 0 records
'... Later
set rs2.Bookmark = vBookmark
wsp.CommitTrans
End Sub
为此:
Private Sub Test()
dim vBookmark as Variant
dim wsp as Workspace
dim rs as DAO.Recordset
dim rs2 as DAO.Recordset
set wsp = DBEngine.Workspaces(0)
set rs = CurrentDB.OpenRecordset("TableName", dbOpenTable)
wsp.BeginTrans
'... Make some record active
vBookmark = rs.LastModified
'Note: ^ Correctly stores bookmark even during an uncommitted transaction
'... Later
set rs2.Bookmark = vBookmark
wsp.CommitTrans
End Sub