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 ...