循环访问 MS Access 中的子记录

Posted

技术标签:

【中文标题】循环访问 MS Access 中的子记录【英文标题】:Loop through subrecords in MS Access 【发布时间】:2017-04-06 11:25:33 【问题描述】:

我有一个嵌套数据表,其中 barfoo 的子级。

要遍历 foo 的所有记录,我会这样做

Dim rst As DAO.Recordset
Set rst = Forms!foo.Form.RecordsetClone

Do Until rst.EOF
    'Do Something
    rst.MoveNext
Loop

但是现在我想遍历它的子表单bar的所有记录。我试过了

Dim rst As DAO.Recordset
Dim subrst As DAO.Recordset
Set rst = Forms!foo.Form.RecordsetClone

Do Until rst.EOF
    Set subrst = Forms!foo.Form!bar.Form.RecordsetClone

    Do Until subrst.EOF
        'Do Something
        subrst.MoveNext
    Loop
rst.MoveNext
Loop

遗憾的是,这只循环遍历第一条记录的子记录。永远不会到达所有其他子记录。如何访问所有其他子记录的记录集?

【问题讨论】:

【参考方案1】:

您拥有的关系是属于父记录的当前(可见)记录的子记录。

要检索剩余的子记录,要么在主窗体上移动记录(使用书签),要么打开子窗体的记录源并在当前循环(“foo”的)父记录的键上循环此过滤。

【讨论】:

所以如果我接受你的第一个建议,我需要在rst.MoveNext 之后执行Me.Bookmark=rst.Bookmark?在没有克隆的情况下移动显示的记录集是不是很糟糕? 仅操作 UI 以计算记录是一种不好的风格,而且速度也慢得多,因为它可以很容易地以静默和更快的方式完成,并且代码量和复杂度相似。

以上是关于循环访问 MS Access 中的子记录的主要内容,如果未能解决你的问题,请参考以下文章

循环访问 MS Access 中所有记录的代码

循环访问 MS Access 子窗体并获取列可见性

循环访问 Access 中的两个记录集并更新条目

MS Access 中的条件选择语句

仅重新查询数据表视图表单中的一条记录 (MS Access)

MS Access 中的子查询问题