ADO - Filtrando Recordsets.

As vezes precisamos visualizar os dados de diversas maneiras . Vamos supor que você tenha que exibir os nomes de uma tabela discriminados pela letra inicial do nome.

Uma maneira simples de obter o resultado é aplicar um filtro ao conjunto de registros selecionados usando a propriedade Filter da ADO.

A sintaxe é a seguinte : objRecordset.Filter = criterio

onde criterio poder :

Enumerator Description
adFilterNone Desabilta o Filtro. Todos os registros pode ser visualziados.
adFilterPendingRecords No modo de atualização em lote , permite que você veja somente os registros que estão pendentes de atualização.
adFilterAffectedRecords Permite visualizar somente os registros afetados pelos comandos :affected by the Delete, Resync, UpdateBatch e CancelBatch.
adFilterFetchedRecords Permite exibir somente os registros que estão atulamente no cache da maquina cliente.
adFilterConflictingRecords Permite exibir as colisões da atualização em lote(batch update) ou seja os registros que no modo de atualização em lote estão com conflitos de concorrência no servidor.

Exemplo Prático

Vamos mostrar como usar esta técnica para filtrar os registros da tabela Authors do banco de dados Pubs no SQL Server 2000 . A idéia e permitir a visualização dos nomes pela letra inicial permitindo que o usuário selecione em uma combobox a letra para a qual deseja exibir os registros.

1- Inicie um novo projeto no VB e no formulário padrão insira os controles conforme layout abaixo:

2- Na seção general Declarations insira o código para declarar as varíaveis

Dim sql As String
Dim rs As New ADODB.Recordset

3- No evento Load do formulário insira o código que irá fazer a conexão com o banco de dados - procedure conecta , e preencher a combo os letra do alfabeto

Private Sub Form_Load()
conecta
For i = 0 To 25
  Combo1.AddItem Chr(65 + i)
Next
Combo1.ListIndex = 0
End Sub

4- A seguir o código da procedure conecta que usa um objeto recordset para criar o conjunto de registros

Private Sub conecta()

sql = "select * from authors"
rs.ActiveConnection = "Provider=SQLOLEDB;" & _
                      "User ID=sa;" & _
                      "Data Source=MACORATI\MACORATTI;" & _
                      "Initial Catalog=pubs"

rs.Open sql, , adOpenDynamic, adLockOptimistic

End Sub

5- O código para gerenciar quando o usuário clicar na combobox e invoca a procedure para exibir os registros conforme a letra escolhida via procedure mostra()

Private Sub Combo1_click()
If Combo1.ListIndex <> -1 Then
  Call mostra(Combo1.Text)
End If
End Sub

6- Finalmente a procedure mostra(letra as string)

Private Sub mostra(letra As String)

rs.Filter = "au_lname Like '" & letra & "%'"

List1.Clear
Do While Not rs.EOF
  List1.AddItem rs.Fields("au_lname") & ", " & rs.Fields("au_fname")
  rs.MoveNext
Loop

End Sub

Observe a linha de código que realiza o filtro:

rs.Filter = "au_lname Like '" & letra & "%'"

usamos o operador Like e a letra selecionada (entre aspas simples) e o operador % indicando que vamos selecionar todos os primeiros nomes com a letra escolhida. Para a letra A teríamos :

rs.Filter = au_lname Like 'A%'

Abaixo o resultado do processamento para letra D:

Até a próxima ...