Partilhar via


Contar o número de registros em um Conjunto de Registros de DAO

Talvez você queira saber o número de registros em um objeto Recordset . Por exemplo, talvez você queira criar um formulário que mostre quantos registros há em cada uma das tabelas de um banco de dados. Ou talvez queira alterar a aparência de um formulário ou relatório com base no número de registros nele contido.

A propriedade RecordCount contém o número de registros em um Recordset do tipo tabela ou o número total de registros acessados em um conjunto de dados ou conjunto de instantâneos recordset. Um objeto Recordset sem registros tem o valor da propriedade RecordCount igual a 0.

Observação

O valor da propriedade RecordCount é igual ao número de registros que foram realmente acessados. Por exemplo, quando você cria um dynaset ou instantâneo pela primeira vez, acessa (ou visita) apenas um registro. Se você verificar a propriedade RecordCount imediatamente depois de criar o dynaset ou instantâneo (pressupondo que ele tenha pelo menos um registro), o valor será 1. Para visitar todos os registros, use o método MoveLast imediatamente após abrir o Recordset e use MoveFirst para retornar ao primeiro registro. Isso não é feito automaticamente porque pode ser lento, especialmente em grandes conjuntos de resultados.

Ao abrir um Recordset do tipo tabela, você visita efetivamente todos os registros da tabela de base e o valor da propriedade RecordCount será igual ao número de registros da tabela, desde que o Recordset esteja aberto.

Transações canceladas podem tornar desatualizado o valor da propriedade RecordCount em algumas situações de vários usuários. Compactar o banco de dados restaura o valor correto da contagem de registros da tabela.

O exemplo de código a seguir cria um objeto Recordset do tipo instantâneo e determina o número de registros contidos em 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

À medida que o aplicativo exclui registros do Recordset do tipo instantâneo, o valor da propriedade RecordCount diminui. No entanto, em um ambiente de vários usuários, os registros excluídos por outros usuários não são refletidos no valor da propriedade RecordCount até o registro atual estar posicionado em um registro excluído. Nesse momento, a configuração da propriedade RecordCount diminui um.

Usar o método Requery em um Recordset, seguido pelo método MoveLast, define a propriedade RecordCount como o número total atual de registros no Recordset.

Um objeto Recordset do tipo instantâneo é estático e o valor da propriedade RecordCount não muda quando você adiciona ou exclui registros na tabela de base do instantâneo.

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.