【问题标题】:How to access updated DAO recordset properties during a transaction?如何在事务期间访问更新的 DAO 记录集属性?
【发布时间】:2017-06-01 21:10:49
【问题描述】:

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

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

我是否正确理解 DAO 书签不是召回可能在提交事务之前添加的记录的可行方法?还有其他更好的方法吗,或者有人有其他建议吗?

【问题讨论】:

    标签: ms-access vba dao


    【解决方案1】:

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

    希望对一些人有所帮助。

    【讨论】:

    • 感谢@RICHARD Pietrzak 的输入。我曾考虑过这一点,但更有可能使用集合或字典,因为它们已被索引以进行快速查找。尽管如此,我还是尽量避免使用索引号,因为如果从记录集中添加或删除记录,它们可能会发生变化。我想我可以创建过程(或者更好的是,类中的方法)来添加/删除重新索引数组的记录,但似乎可能有更有效的方法来做到这一点。我会给这个或某种混合拍摄,让你知道它是怎么回事。如果其他人有任何好的想法,请告诉我!
    【解决方案2】:

    事实证明,虽然 .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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-06
      相关资源
      最近更新 更多