РЕДАКТИРОВАТЬ:
Попробуйте это:
Sub Demo_IterateRecords()
Const tblName = "YOUR TABLE NAME HERE"
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset(tblName)
With rs
.MoveLast
.MoveFirst
If MsgBox("Do you want to list all " & .RecordCount & " records?", _
vbOKCancel, "Confirmation") <> vbOK Then GoTo ExitMySub
Do While Not .EOF
Debug.Print .Fields(0), .Fields(1), .Fields(2)
rs.MoveNext
Loop
ExitMySub:
.Close
End With
Set rs = Nothing
End Sub
Я использовал .Fields(_)
, потому что я не уверен, как называются ваши поля, но лучший способ обратиться к ним будетпо имени, например:
Debug.Print !myID, !myEmployeeName, !myEmployeeAddress
Оригинальный ответ:
Попробуйте:
RS.MoveLast
RS.MoveFirst
recCount = RS.RecordCount
Debug.Print(recCount)
Доступ не знает, сколько существует записей, пока выПройдите их хотя бы один раз.
Если бы вы проверяли значение RS.RecordCount
после вашего цикла, вы бы получили число.
Заметки
Используйте свойство Recordcount
, чтобы узнать, сколько записей в объекте Recordset или TableDef
было получено.Свойство RecordCount
не указывает, сколько записей содержится в объекте Recordset типа dynaset -, snapshot- или forward-only, до тех пор, пока не будут получены все записи.После получения доступа к последней записи свойство RecordCount
указывает общее количество восстановленных записей в объекте Recordset или TableDef.Для принудительного доступа к последней записи используйте метод MoveLast объекта Recordset.Вы также можете использовать функцию SQL Count
, чтобы определить приблизительное число записей, которые будет возвращать ваш запрос.
Важное примечание
Использование метода MoveLast
для заполнения вновь открытого набора записей негативно влияетспектакль. Если нет необходимости иметь точный RecordCount
, как только вы откроете набор записей , лучше дождаться, пока вы не наполните набор записей другими частями кода , прежде чем проверять RecordCount
имущество.
( Источник )
См. Также: MSDN: Recordset.RecordCount Свойство