选择表数据到数组 - 只提取一行

时间:2015-06-05 15:19:28

标签: vba ms-access access-vba

我正在尝试从表EmailList中获取数据并将其放入一个数组中,该数组将传递到Outlook电子邮件消息的“To:”字段(电子邮件的脚本已生成)。我计划使用Join()函数将数组合并为一个字符串,如下所示:Join(varEmailList, "; ")

我的代码:

Private Sub Propose_Click()

Dim MyDB As DAO.Database
 Dim rstEmails As DAO.Recordset
 Dim varEmails() As Variant
 Dim intRowNum As Integer
 Dim intColNum As Integer

 Set MyDB = CurrentDb
 Set rstEmails = MyDB.OpenRecordset("select email from EmailList", dbOpenSnapshot)

 'Let's retrieve ALL Rows in the rstEmails Recordset
 varEmails = rstEmails.GetRows()

 MsgBox ("Number of Fields Retrieved: " & UBound(varEmails, 1) + 1)

 rstEmails.Close
 Set rstEmails = Nothing

End Sub

我遇到的问题是代码中只找到一条记录,一次至少应有10条记录。

3 个答案:

答案 0 :(得分:2)

GetRows方法返回的行不超过一行,除非您明确告诉它返回更多行。

要求'Let's retrieve ALL Rows in the rstEmails Recordset 'varEmails = rstEmails.GetRows() With rstEmails .MoveLast .MoveFirst varEmails = .GetRows(.RecordCount) .Close End With 检索所有行:

 
MsgBox ("Number of Fields Retrieved: " & UBound(varEmails, 1) + 1)

这是另一个问题......

MsgBox ("Number of Fields Retrieved: " & UBound(varEmails, 2) + 1)

该数组的第一个维度是字段---在这种情况下只有一个。第二个维度具有这些字段的值:

{{1}}

答案 1 :(得分:0)

根据MSDN

  

使用GetRows方法从Recordset中复制记录。 GetRows返回一个二维数组。第一个下标标识字段,第二个下标标识行号。

您实际上想要第二维中的项目数:

UBound(varEmails, 2)

答案 2 :(得分:0)

如果您向GetRows提供说明

rs.GetRows(100)

但是你的记录集中有一个错误,例如除以零(#NUM),并且该错误在第50行,只返回49行,GetRows将默默地提前停止。