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.