如何在事务期间访问更新的DAO记录集属性?

时间:2017-06-01 21:10:49

标签: ms-access access-vba dao

我正在Access中开发一个使用DAO中的事务处理的应用程序。我使用一个类来表示从另一个源导入的数据体。除此之外,该类还包含记录集字典,每个记录集都添加了新记录,或者根据是否存在具有相同主键的另一记录来编辑现有记录。我从普通代码模块中的另一个过程创建此类的实例,并使用该类的属性和方法来执行分析并最终确定数据提取。

在一个程序中,我想随后编辑每个记录集的最近添加或编辑的记录,以便通过类的方法来预测已经对这些记录做了什么。问题是,在事务开始处理之后,.Recordcount属性在事务提交之前似乎没有更新,并且看起来我不能在提交之前为新添加/编辑的记录设置书签它。当尝试将书签设置为刚刚添加的记录(Recordcount属性仍为0)时,后一个问题会抛出“No Current Record”错误。

我是否理解DAO书签不是一种可行的方式来回忆可能在提交交易之前添加的记录?还有其他更好的方法吗,或者有人有任何其他建议吗?

2 个答案:

答案 0 :(得分:0)

如果您需要引用记录但无法通过书签,请使用类型变量的静态数组挂起数据。使用数组中的一个元素作为排序的书签。要处理数组以查找书签,请保留一个静态变量,其中包含数组中书签的索引值。

希望有所帮助。

答案 1 :(得分:0)

事实证明,虽然.Book标记属性在事务期间不可用.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