Ms access 如何在事务期间访问更新的DAO记录集属性?
我正在Access中开发一个应用程序,它在DAO中使用事务处理。我使用一个类来表示从另一个源导入的数据体。除此之外,这个类包含一个记录集字典,每个记录集都添加了一个新记录或编辑了一个现有记录,具体取决于是否存在具有相同主键的另一个记录。我从普通代码模块中的另一个过程创建该类的实例,并使用该类的属性和方法执行分析和完成数据提取 在一个过程中,我希望随后为每个记录集编辑最近添加或编辑的记录,以便预兆通过类的方法对这些记录所做的操作。问题是,在事务开始处理之后,.Recordcount属性在事务提交之前似乎不会更新,而且在提交之前,我似乎无法为新添加/编辑的记录设置书签。后一个问题在尝试为刚添加的记录设置书签(Recordcount属性仍为0)时引发“无当前记录”错误Ms access 如何在事务期间访问更新的DAO记录集属性?,ms-access,vba,dao,Ms Access,Vba,Dao,我正在Access中开发一个应用程序,它在DAO中使用事务处理。我使用一个类来表示从另一个源导入的数据体。除此之外,这个类包含一个记录集字典,每个记录集都添加了一个新记录或编辑了一个现有记录,具体取决于是否存在具有相同主键的另一个记录。我从普通代码模块中的另一个过程创建该类的实例,并使用该类的属性和方法执行分析和完成数据提取 在一个过程中,我希望随后为每个记录集编辑最近添加或编辑的记录,以便预兆通过类的方法对这些记录所做的操作。问题是,在事务开始处理之后,.Recordcount属性在事务提交之
我的理解正确吗?DAO书签不是一种可行的方法来调用可能在提交事务之前添加的记录?还有其他更好的方法吗,或者有人有其他建议吗?如果您需要引用记录,但无法通过书签,请使用variant类型的静态数组来挂起数据。使用数组中的一个元素作为排序书签。要处理数组以查找书签,请在数组中保留一个带有书签索引值的静态变量
希望对您有所帮助。结果表明,尽管.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
感谢RICHARD Pietrzak的输入。我曾经考虑过这一点,但更可能使用集合或字典,因为它们被编入索引以便快速查找。即便如此,我还是尽量避免使用索引号,因为如果在记录集中添加或删除记录,索引号可能会更改。我想我可以创建过程(或者更好的是,类中的方法)来添加/删除记录,从而重新索引数组,但似乎有一种更有效的方法可以做到这一点。我将尝试一下这一点或某种混合方法,并让您知道它是如何进行的。如果其他人有什么好主意,请告诉我!