Caso você ainda não tenha lido a terceira parte, voce pode acessá-la em ADO ADOX (ActiveX Data Objects).
Uma propriedade importante de um recordset é a propriedade Recordcount. Diferentemente do DAO (onde precisamos mover dentro dos registros e retornar ao primeiro para não obtermos o famigerado -1), no ADO a contagem é feita diretamente, bastando apenas determinar a propriedade.
O código abaixo dará o número de registros contidos na tabela Categorias (pois selecionamos todos os registros ao utilizarmos o asterisco). Em termos gerais, a propriedade retorna o número de registro no recordset o qual pode ou não representar a tabela por completo:
Sub RecordsetRecCount()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
cn.Open strCn
rs.Open "SELECT * FROM Categorias", cn, adOpenKeyset, adLockPessimistic
Debug.Print rs.RecordCount
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End Sub
Abrir uma tabela por completo em um recordset nós somos, de certo modo, redundantes. Com isso quero dizer que normalmente nós desejamos apenas parte dos dados e não todos. Por exemplo, poderíamos querer todos os clientes iniciados pela letra “C”.
Neste caso, nós precisamos determinar na instrução SQL o que desejamos que seja retornado em nosso recordset. Para isso nós utilizamos a cláusula WHERE.
O ideal nestes casos é termos uma string declarada para escrevermos a instrução SQL. Com a string pronta nós a introduzimos no argumento do método Open e o comprimento da instrução é dastricamente reduzido.
Vejamos alguns exemplos de instruções SQL que fazem isso. Aqui vemos como passar um parâmetro, pois como queremos basear a consulta em uma condição não podemos amarrar a condição dentro da rotina.
Sub executarRs()
Call RecordsetWhere(1)
End Sub
Sub RecordsetWhere(ByVal código As Long)
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strSQL As String
strSQL = "SELECT * FROM Produtos WHERE CódigoDaCategoria=" & código
cn.Open strCn
With rs
.Open strSQL, cn, adOpenKeyset, adLockPessimistic
.MoveFirst
Debug.Print "Registros para o recordset da categoria " _
& código & " --> " & .RecordCount
Debug.Print vbCr & "NOMES DOS PRODUTOS"
Do While Not .EOF
Debug.Print !NomeDoProduto
.MoveNext
Loop
End With
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End Sub
Uma vez executado, teremos a seguinte impressão na janela imediata;
Figura 2‑3 Resultado da impressão do recordset
O exemplo acima assume uma passagem de parâmetro numérica. Suponha um outro cenário onde o que queremos é retornar todos os produtos contendo uma string qualquer, como proceder?
O próximo exemplo será um pouco mais elaborado e utilizaremos o comparador LIKE. Precisaremos de um formulário como segue:

Figura 2‑4 Formulário de seleção
No formulário digitaremos o que buscamos e escolheremos o tipo de busca. O botão Executar deve conter a seguinte instrução:
Private Sub cmdExecutar_Click()
Call RecordsetLike(Me.txtBusca, Me.cboTipo.Value)
End Sub
A rotina RecordsetLike recebe dois argumento: 1) texto de busca e 2) o tipo de busca.
Sub RecordsetLike(ByVal strBusca As String, ByVal Tipo As String)
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strSQL As String
Dim lngLin As Long
On Error GoTo Err_Handler
' Determina a opcao escolhida pelo usuário para remontar
' a string de busca
Select Case UCase(Tipo)
' Se for registros que "terminam em" alguma coisa
' adicionar o apóstrofo e sinal de percentual
' para indicar que termina na string digitada pela usuário
Case "TERMINA EM"
strBusca = "'%" & strBusca & "'"
Case "COMEÇA EM"
strBusca = "'" & strBusca & "%'"
Case "CONTÉM"
strBusca = "'%" & strBusca & "%'"
Case Else
MsgBox "Opção de busca inválida. Cancelando a operação...", _
vbExclamation
Exit Sub
End Select
strSQL = "SELECT * FROM Produtos"
strSQL = strSQL & " WHERE NomeDoProduto Like " & strBusca
cn.Open strCn
lngLin = 3
With rs
.Open strSQL, cn, adOpenKeyset, adLockPessimistic
.MoveFirst
ActiveSheet.Cells(1, 1) = "Registros para o recordset da categoria " _
& strBusca & " --> " & .RecordCount
ActiveSheet.Cells(2, 1) = "NOMES DOS PRODUTOS"
Do While Not .EOF
ActiveSheet.Cells(lngLin, 1) = !NomeDoProduto
lngLin = lngLin + 1
.MoveNext
Loop
End With
Limpar:
On Error Resume Next
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
Exit Sub
Err_Handler:
MsgBox Err.Description, vbCritical, Err.Number
Resume Limpar
End Sub
Diferentemente do caso numérico, aqui nós precisamos envelopar a string em apóstrofos. Também utilizamos o sinal de percentual para determinar o tipo de busca, isto é se o sinal aparece no início da string a busca é para produtos terminados com aquela string.
Por outro lado, se o sinal aparece no final da string a busca é para produtos iniciados por aquela string. E, finalmente, se a string contiver um sinal no início e fim, então a busca é por produtos que contenham a string.