为什么VBA中的Recordset仅返回一条记录?

时间:2018-09-26 14:06:09

标签: vba ms-access

我有3个表,分别是“人”,“ per_resi”和“住所” 这三个表形成多对多关系。

表格“人”字段:ID,姓名等...

表格“居住”字段:id,街道等.....

表“ per_resi”字段:person_id和Residence_id(共同主体索引)

好吧,问题是当我在图形访问工具中设计查询时,它应该按原样工作。

enter image description here

但是如果我在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 Access 2013

谢谢。

2 个答案:

答案 0 :(得分:0)

谢谢大家

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

这是答案。

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

  

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

     

Count the number of records in a DAO Recordset

谢谢!

答案 1 :(得分:0)

添加以下语句:

rvivienda.MoveNext 

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

rvivienda.MoveLast

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

您将看到结果。

goosie2018's answer是正确的。我只是向您展示一种简单的理解方式。

摘要

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

rvivienda.RecordCount

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

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