Contar el número de registros de un objeto Recordset de DAO
Es posible que desee conocer el número de registros de un objeto Recordset . Por ejemplo, puede que necesite crear un formulario que muestre cuántos registros hay en cada una de las tablas de una base de datos. O puede que necesite cambiar la apariencia de un formulario o informe en función del número de registros que contiene.
La propiedad RecordCount contiene el número de registros de un objeto Recordset de tipo tabla o el número total de registros a los que se accede en un objeto Recordset de tipo dynaset o snapshot. El valor de la propiedad RecordCount de un objeto Recordset sin registros es 0.
Nota:
El valor de la propiedad RecordCount es igual al número de registros a los que realmente se tuvo acceso. Por ejemplo, cuando se crea un objeto conjunto de registros dinámicos o instantánea por primera vez, solo se tuvo acceso a (o visitó) un registro. Si, inmediatamente después de crear el objeto conjunto de registros dinámicos o instantánea (suponiendo que tiene al menos un registro), comprueba la propiedad RecordCount, el valor será 1. Para visitar todos los registros, use el método MoveLast inmediatamente después de abrir el objeto Recordset y, a continuación, use MoveFirst para volver al primer registro. Esta operación no se realiza automáticamente porque puede ser lenta, especialmente en el caso de los conjuntos de resultados grandes.
Cuando se abre un objeto Recordset de tipo tabla se visitan realmente todos los registros de la tabla subyacente, y el valor de la propiedad RecordCount es igual al número de registros de la tabla en cuanto se abre el objeto Recordset.
En algunas situaciones multiusuario, las transacciones canceladas pueden hacer que el valor de la propiedad RecordCount quede obsoleto. Al compactar la base de datos se restaura el valor correcto para el total de registros de la tabla.
En el siguiente ejemplo de código se crea un objeto Recordset de tipo instantánea y se determina el número de registros de Recordset.
Function FindRecordCount(strSQL As String) As Long
Dim dbsNorthwind As DAO.Database
Dim rstRecords As DAO.Recordset
On Error GoTo ErrorHandler
Set dbsNorthwind = CurrentDb
Set rstRecords = dbsNorthwind.OpenRecordset(strSQL)
If rstRecords.EOF Then
FindRecordCount = 0
Else
rstRecords.MoveLast
FindRecordCount = rstRecords.RecordCount
End If
rstRecords.Close
dbsNorthwind.Close
Set rstRecords = Nothing
Set dbsNorthwind = Nothing
Exit Function
ErrorHandler:
MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Function
Como la aplicación elimina registros del objeto Recordset de tipo conjunto de registros dinámicos, el valor de la propiedad RecordCount disminuye. Sin embargo, en los entornos multiusuario, los registros que eliminan usuarios no se reflejan en el valor de la propiedad RecordCount hasta que el registro actual se sitúa en un registro eliminado. En ese momento, del valor de la propiedad RecordCount disminuye en uno.
El uso del método Requery en un objeto Recordset, seguido por el método MoveLast, establece la propiedad RecordCount en el número total actual de registros del objeto Recordset.
Un objeto Recordset de tipo Snapshot es estático, y el valor de su propiedad RecordCount no cambia cuando se agregan o se eliminan registros de la tabla subyacente del objeto Snapshot.
Soporte técnico y comentarios
¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de