Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 如何在事务期间访问更新的DAO记录集属性?_Ms Access_Vba_Dao - Fatal编程技术网

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

Ms access 如何在事务期间访问更新的DAO记录集属性?,ms-access,vba,dao,Ms Access,Vba,Dao,我正在Access中开发一个应用程序,它在DAO中使用事务处理。我使用一个类来表示从另一个源导入的数据体。除此之外,这个类包含一个记录集字典,每个记录集都添加了一个新记录或编辑了一个现有记录,具体取决于是否存在具有相同主键的另一个记录。我从普通代码模块中的另一个过程创建该类的实例,并使用该类的属性和方法执行分析和完成数据提取 在一个过程中,我希望随后为每个记录集编辑最近添加或编辑的记录,以便预兆通过类的方法对这些记录所做的操作。问题是,在事务开始处理之后,.Recordcount属性在事务提交之

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

在一个过程中,我希望随后为每个记录集编辑最近添加或编辑的记录,以便预兆通过类的方法对这些记录所做的操作。问题是,在事务开始处理之后,.Recordcount属性在事务提交之前似乎不会更新,而且在提交之前,我似乎无法为新添加/编辑的记录设置书签。后一个问题在尝试为刚添加的记录设置书签(Recordcount属性仍为0)时引发“无当前记录”错误


我的理解正确吗?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的输入。我曾经考虑过这一点,但更可能使用集合或字典,因为它们被编入索引以便快速查找。即便如此,我还是尽量避免使用索引号,因为如果在记录集中添加或删除记录,索引号可能会更改。我想我可以创建过程(或者更好的是,类中的方法)来添加/删除记录,从而重新索引数组,但似乎有一种更有效的方法可以做到这一点。我将尝试一下这一点或某种混合方法,并让您知道它是如何进行的。如果其他人有什么好主意,请告诉我!