【问题标题】:Why the Recordset from VBA just return one record?为什么 VBA 的 Recordset 只返回一条记录?
【发布时间】:2018-09-26 14:06:09
【问题描述】:

我有 3 张桌子,“persons”、“per_resi”和“residence” 这三个表形成了多对多关系。

表“人”字段:id、name 等......

表“住所”字段:id、Street 等.....

表“per_resi”字段:person_id 和 Residence_id(以及主索引)

嗯,问题是当我在图形访问工具中设计一个查询时,它可以正常工作。

但如果我在 VBA 中这样做,它只会返回 1 条记录。

Dim svivienda As String
Dim rvivienda As Recordset

svivienda = "SELECT tbl_persona.Id, tbl_vivienda.Calle, tbl_vivienda.Numero " _
          & "FROM tbl_vivienda INNER JOIN (tbl_persona INNER JOIN tbl_perso_viv ON tbl_persona.Id = tbl_perso_viv.Id_persona) " _
          & "ON tbl_vivienda.Id = tbl_perso_viv.Id_vivienda WHERE tbl_persona.Id = " & 168 & ";"

Set rvivienda = CurrentDb.OpenRecordset(svivienda, dbOpenDynaset)

我尝试了 LEFT JOIN 和 RIGHT JOIN,但总是相同,只有记录集中的一条记录。

有什么想法吗?

MS 访问 2013

提前致谢。

【问题讨论】:

  • 您是从查询向导中复制的吗?您如何评估它包含 1 条记录?

标签: vba ms-access


【解决方案1】:

谢谢大家,

这是一个非常新颖的问题。

这就是答案。

RecordCount 属性不报告您拥有的记录数量。

RecordCount 属性的值等于记录数 实际访问过的。例如,当您第一次创建一个 动态集或快照,您只访问(或访问)了一条记录。 如果在创建后立即检查 RecordCount 属性 动态集或快照(假设它至少有一条记录),值 是 1. 要访问所有记录,立即使用 MoveLast 方法 打开 Recordset 后,然后使用 MoveFirst 返回到 第一个记录。这不是自动完成的,因为它可能很慢, 特别是对于大型结果集。

Count the number of records in a DAO Recordset

谢谢!!!

【讨论】:

  • 如果您查看 ADO 和光标等的不同参数,您可以使用 recordcount 属性
【解决方案2】:

添加以下语句:

rvivienda.MoveNext 

将返回记录集的下一条记录 或:

rvivienda.MoveLast

将返回记录集的最后一条记录

你会看到结果。

goosie2018's answer 是正确的。我只是告诉你简单的理解方式。

摘要

所以,我认为您从数据库中获取的记录集不会显示结果看起来像一个数组或列表,而是一个游标。并且默认光标指向第一行,所以如果你使用:

rvivienda.RecordCount

您应该收到实际获得的记录数。

对不起我的英语!感谢您的阅读。

【讨论】:

    猜你喜欢
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多