Publicidade

Nós usamos a propriedade Filter para estreitar mais as informações que podemos ver no conjunto de registros de acordo com o critério fornecido. Isso é especialmente bom quando há muitos dados sendo retornados. Por exemplo, você poderia filtrar todos os nomes com valor Alexandre, ou todos os registros com estado = SP. Você pode filtrar o seu recordset para visualizar apenas as informações que você quer, sem destruir o resto das informações. Todas as informações continuaram intactas, apenas ficam escondidas até você finalizar a filtragem.

Aplicando a filtragem você obtém um subconjunto de todas as linhas, somente os dados filtrados são exibidos (subconjunto). Assim você pode se mover pelo conjunto de registros do primeiro até o último e ver somente os registros que satisfazem seu critério. Se nenhum registro estiver na filtragem então BOF e EOF serão verdadeiros. Senão, você deve ser posicionado para o primeiro registro. Você pode usar os métodos MoveNext, MovePrevious, MoveFirst e MoveLast, para navegar pelo conjunto de registros filtrados.

Como usar a propriedade Filter

A sintaxe é:

seu_recordset. Filter = valor

Podemos ajustar a propriedade Filter para um valor de uma das seguintes formas:

  • Uma declaração WHERE do SQL. Você pode fornecer o que é uma sentença WHERE do SQL (entre aspas), usando os nomes de campo do registros, operadores lógicos (<,<=,>,>=,= <>,LIKE), e valores (datas, strings, curingas (* e %) etc., quando usamos LIKE). Não usamos realmente a palavra WHERE, como você vai ver no exemplo de código a seguir.
  • Uma matriz de indicadores. Você pode fornecer uma matriz de indicadores, somente os registros indicados estarão disponíveis no conjunto.
  • Um valor FilterGroupEnum. Estas constantes estão descritas abaixo:

adFilter desliga a filtragem. Com esta configuração, todos os registros podem ser visualizados
adFilterPendingRecords Em um modo de atualização batch, esta constante garante que você só esta vendo aqueles registros que estão dependendo de update, mudanças que foram feitas no conjunto mas não foram enviadas aos Server.
adFilterAffectedRecords Permite que você visualize apenas os registros afetados pelas chamadas Delete, ReSync, UpdateBatch e CancelBatch.
adFilterFetchedRecords Permite visualizar apenas os registros que estão atualmente armazenados na maquina cliente, recuperados nas consultas mais recentes ao banco de dados.
adFilterConflictingRecords Permite visualizar colisões de atualizações batch, os registros atualizados no do batch com conflitos concorrentes no Server (aqueles que não puderam ser atualizados).

Exemplo:
Pegando o conteúdo da tabela autor e do banco de dados pubs e filtrando o conteúdo pela primeira letra do nome:

<%
grava os elos do alfabeto
For intLetra = 65 to 90
    Response.write(<a href=filter.asp?letra= &_
Chr (intLetra) & > &_
Chr (intLetra) & </A> &nbps:nbps;
Next
Response.write (<BR>)

Este exemplo armazena um recordset em uma variável Session. Como foi explicado anteriormente,armazenar os objetos ADO em variáveis Session não é uma boa pratica.Isto foi feito para demonstrar como a técnica de filtragem funciona.

Agora vamos abrir a conexão com o bd pubs e consultar os registros na tabela auto:

If Not isObject (session(RS)) then
    Set objrs= Server.CreateObjetc(ADODB.Recordset)
    strSQL = SELECT * FROM autor
    objrs.ActiveConnection = Provider=SQLOLEDB; &_
            User ID=sa; &_
            Data Source=teste; &_
            Initial Catalog=pubs
Objrs.CursorType = 3  adopenStatic
Objrs.Open strSQL

Observe que o script só precisa ir ao banco uma vez. A primeira vez que o usuário usar a pagina, ele vai visualizar os conteúdos filtrados do recordset, mostrando somente os autores cujo nome inicia com A:

Display(A)  ´Exibe os nomes com inicio em A
Set session(RS) = objrs

Vamos ver o procedimento Display, nas consultas subsequentes (quando o objeto da sessão Session(rs) não é nulo), exibimos o conjunto de registros filtrados com a letra de escolha do user, contida na variável letra.

Else
    Set objrs  = Session(RS)
    Strletra = request(letra)
    Display (strletra)
End IF

Vamos ver, o procedimento Display, tudo que fazemos é ajustar o filtro (usando a consulta SQL do tipo WHERE) e exibir os conteúdos dos registros filtrados.

Sub Display (strletraToFilter)
    ajusta o filtro
Objrs.Filter = nome LIKE &strLetratoFilter & %
Response. Write <H2> & strLetraToFilter & </H2>
Response. Write <TABLE Border=1><THEAD> &_
    <TH>Nome</TH><TH>Fone</TH><TH>Endereço</TH> &_
        <TBBODY>
DoWhile Not objrs.EOF
    Response. Write<TR><TD> &_
        Objrs(nome) &, &nbsp; & objrs(Nick) &_
        </TD><TD> &_
        Objrs(fone) &_
        </TD><TD> &_
        Objrs(Endereço) &_
        </TD><TD></TR>
    Objrs.MoveNext
Loop
Response. Write(</TABLE>

Na próxima consulta, desligamos o filtro usando a linha
Objrs.Filter = 0 (observe que 0 = adFilterNone) 

E movemos o ponteiro de volta para o primeiro registro não filtrado.

Desliga o filtro
Objrs.Filter = 0
Move para o 1º registro
Objrs.MoveFirst
End Sub
%>
</TBODY></HTML>