MS-Access RecordCount返回有效数字,但.GetRows仅提取一条记录

时间:2017-01-11 15:16:02

标签: vba ms-access access-vba

好的我正在尝试动态获取recordCount并将其传递给.GetRows,但它不起作用,因为它只将一条记录拉入数组。如果我只是静态地将一个数字放入.GetRows方法中它工作正常,但这显然不理想。

此作品

Set rs = CurrentDb.OpenRecordset("SELECT * FROM Client", dbOpenDynaset, dbSeeChanges)
aRR = rs.GetRows("random number")
For i = 0 To rs.RecordCount - 1
    For j = 0 To rs.Fields.Count - 1
        Debug.Print ; aRR(j, i)
    Next j
Next i

这不是

Set rs = CurrentDb.OpenRecordset("SELECT * FROM Client", dbOpenDynaset, dbSeeChanges)
With rs
    rs.MoveLast
    Debug.Print ; rs.RecordCount
    Q = rs.RecordCount
    aRR = rs.GetRows(Q)
End With
For i = 0 To rs.RecordCount - 1
    For j = 0 To rs.Fields.Count - 1
        Debug.Print ; aRR(j, i)
    Next j
Next i

我尝试过多次在网上找到的东西,但显然我一定错过了什么?是否有一个简单的方法,或者我需要使用DISTINCT clase重新查询,并将该记录集中的返回值传递给新变量?

2 个答案:

答案 0 :(得分:2)

GetRows也使用记录集的指针。使用rs.MoveFirst,您将指针放在最后一行。这就是为什么只返回一行的原因。设置Q后添加PendingIntent即可解决此问题。

答案 1 :(得分:0)

与Phesago提到的一样,Access只会根据它正在查看的记录集中的哪条记录返回记录数。作为使用记录集的一般做法,我总是从以下模板开始:

Private Sub CreateRecordset()
    Dim rs As Recordset
    Dim sql As String

    sql = "SELCT * FROM tblSomeTable"

    Set rs = CurrentDb.OpenRecordset(sql, dbOpenDynaset, dbSeeChanges)

    With rs
        If Not .EOF And Not .BOF Then
            .MoveLast
            .MoveFirst

            Dim i As Integer

            For i = 0 To rs.RecordCount - 1
                'do whatever actions desired



            Next

        End If
    End With
End Sub