Dev (Back & Front)ARTIGO

Filtragem

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:

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:

<%<br /> grava os elos do alfabeto<br />For intLetra = 65 to 90<br />    Response.write(<a href=filter.asp?letra= &_<br />Chr (intLetra) & > &_<br />Chr (intLetra) & </A> &nbps:nbps;<br />Next<br />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<br />    Set objrs= Server.CreateObjetc(ADODB.Recordset)<br />    strSQL = SELECT * FROM autor<br />    objrs.ActiveConnection = Provider=SQLOLEDB;  &_<br />            User ID=sa; &_<br />            Data Source=teste; &_<br />            Initial Catalog=pubs<br />Objrs.CursorType = 3   adopenStatic<br />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<br />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<br />    Set objrs  = Session(RS)<br />    Strletra = request(letra)<br />    Display (strletra)<br />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)<br />     ajusta o filtro<br />Objrs.Filter = nome LIKE  &strLetratoFilter & % <br />Response. Write <H2> & strLetraToFilter & </H2><br />Response. Write <TABLE Border=1><THEAD> &_<br />    <TH>Nome</TH><TH>Fone</TH><TH>Endereço</TH> &_<br />        <TBBODY><br />DoWhile Not objrs.EOF<br />    Response. Write<TR><TD> &_<br />        Objrs(nome) &, &nbsp;  & objrs(Nick) &_<br />        </TD><TD>  &_<br />        Objrs(fone) &_<br />        </TD><TD>  &_<br />        Objrs(Endereço) &_<br />        </TD><TD></TR><br />    Objrs.MoveNext<br />Loop<br />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<br />Objrs.Filter = 0<br />Move para o 1º registro<br />Objrs.MoveFirst<br />End Sub<br />%><br /></TBODY></HTML>

é Bacharel em Ciência da Computação, pós-graduação não concluída em Inteligência Artificial (IA) pela USFCAR, desenvolvedor de aplicativos WEB e autor de livros para cursos de informática e consultor de web. Com mais de 10 anos de experiência, autor de vários artigos e tutoriais na Web nas tecnologias ASP,SQL,JAVASCRIPT ,ASP.Net,XML , AJAX . e outros recursos. Atualmente trabalha como Coordenador de cursos de T.I.

Ver perfil