Anda di halaman 1dari 4

O QUE PAGINAO?

Utilizando Recursos de Paginao

Quando se faz uma consulta a uma ou mais tabelas para mostrar seu contedo na tela,
pode-se obter um nmero de registros muito grande, de forma que o usurio no se
sentir muito confortvel ao navegar por estes registros uma vez que ele ter que usar
a barra de rolagem para "subir" ou "descer" a pgina j que no consegue visualiz-los
em uma nica tela.
Para solucionar este pequeno problema, utiliza-se o recurso de Paginao , onde os
registros so colocados em vrias pginas, e estas pginas mostraro sempre um
nmero limitado de registros.
Se uma pgina tem tamanho 20, isto significa que sero mostrados 20 registros em
cada pgina. Assim, se uma consulta retornar 100 registros, existiro 5 pginas com
20 registros cada. A primeira pgina mostrar os registros de nmero 1 at 20, a
segunda pgina mostrar os registros de nmero 21 at 40 e assim por diante.Cada
pgina ter um boto ou um link para a prxima pgina e a pgina anterior.
O QUE NECESSRIO PARA UTILIZAR O RECURSO DE PAGINAO?
A maior parte dos recursos utilizados para implementar o sistema de paginao sero
propriedades do RecordSet.
A primeira considerao importante que o cursor do objeto Connection deve
residir no cliente. Isto equivale a dizer que a propriedade CursorLocation do objeto
connection igual a adUseClient, ou se no quiser utilizar as constantes do arquivo
adovbs.inc, use o nmero 3 ao invs de adUseClient. Na verdade, a constante
adUseClient tem o valor 3 no arquivo adovbs.inc. Logo, tanto faz usar adUseClient ou
3, pois adUseClient = 3.
CONCLUSO: CASO QUEIRA USAR A CONSTANTE adUseClient, VOC DEVER
COLOCAR A DIRETIVA <!-- # INCLUDE FILE = "ADOVBS.INC" --> NO INCIO DA SUA
PGINA. PARA MAIORES INFORMAES SOBRE O INCLUDE, LEIA O ARTIGO Utilizando
a diretiva Include ( e poupando trabalho )
<http://www.aspbrasil.com.br/ver_tutorial.asp?tutorial=42> DO ASPBRASIL.
Se voc no compreendeu o porqu dos pr-requisitos do objeto Connection
para a utilizao dos recursos de paginao, no se preocupe. Por hora,
apenas aceite que dever ser feito desta maneira e siga em frente procurando
entender o resto do tutorial. Est sendo preparada uma srie de tutoriais que
abordam os fundamentos dos objetos RecordSet e Connection que breve
estaro disponveis no ASPBrasil. Esta parte terica indispensvel para o
aprendizado da linguagem e para a formao de um bom programador.
Para criar o objeto Connection, definir a Propriedade CursorLocation e abr-lo, use o
seguinte cdigo:
<%
ConnectString = "dsn=nome_odbc;uid=usuario;pwd=senha"
Set Conn = server.CreateObject("ADODB.Connection")
Conn.CursorLocation = 3 ' adUseClient

Conn.Open ConnectString
%>
O prximo passo criar o objeto RecordSet e definir a propriedade PageSize, que a
propriedade que diz quantos registros conter cada pgina e informar que deve ser
mostrada a primeira pgina de registros atravs da propriedade AbsolutePage.
aconselhvel setar o valor da propriedade CacheSize para o mesmo tamanho da
pgina para otimizar a performance do processo.
<%
Set rstTemp = server.CreateObject("ADODB.Recordset")
rstTemp.PageSize = 20 ' define o tamanho da "pgina"
rstTemp.CacheSize = 20 ' define o tamanho do cache com o mesmo tamanho da
pgina
rstTemp.AbsolutePage = 1 ' informa que a primeira pgina de registros ser
mostrada
%>

PRXIMOS PASSOS
A primeira etapa est pronta. J foi definido o tipo de cursor do objeto Connection e o
tamanho da pgina do RecordSet. Agora ser preciso um pouco de cdigo para
controlar qual pgina dever ser exibida na tela.
Todavia, antes da implementao do cdigo, deve-se entender como funciona todo o
mecanismo ASP quando se utiliza paginao.
A primeira coisa a se levar em conta que a cada vez que o usurio requisitar uma
nova pgina de registros ( navegar para a prxima pgina ou para a pgina anterior
atravs de um link ou um boto ), a mesma pgina .ASP ser recarregada ( atualizada
) , apenas tendo o valor do AbsolutePage alterado para AbsolutePage + 1 ( se o
usurio clicar em "Prxima") ou AbsolutePage -1 ( se o usurio clicar em "Anterior" ).
Isto faz com que a mesma pgina .ASP seja recarregada no browser, mas com
diferentes pginas de registros.
Como a pgina ser recarregada vrias vezes conforme o usurio navega entre os
registros, conveniente criar uma varivel de sesso para guardar qual a pgina de
registros deve ser exibida ( session("Pagina") ) e uma varivel para saber se a
primeira vez ou no que se est carregando a pgina ( session("PrimeiraVez") ). A
cada vez que a pgina for recarregada, o valor de session("Pagina") ser lido e o
ponteiro do RecordSet ir para a pgina que tiver o mesmo nmero que este valor. Se
for a primeira vez que a pgina est sendo carregada, o ponteiro ir para a primeira
pgina de registros ( setando a propriedade AbsolutePage com o valor 1 ).
Agora que j foi dada uma base terica de como as coisas funcionam, interessante
ler primeiro o cdigo inteiro para depois analis-lo em partes. Esta a forma mais fcil
para se entender todo o procedimento.
<%
ConnectString= "dsn=banco;uid=usurio;pwd=senha"

If Session("PrimeiraVez") <> "Nao" then ' Se a primeira vez que a pgina


carregada
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.CursorLocation = 3 ' o mesmo que adUseClient
Conn.Open ConnectString
Set rstTemp = Server.CreateObject("ADODB.Recordset")
rstTemp.CacheSize = 20 ' tamanho do cache
rstTemp.PageSize = 20 ' tamanho da pgina de registros
sql = "Select * from tabela"
rstTemp.Open Sql, Conn
session("Pagina") = 1
MostraDados
Session("PrimeiraVez") = "Nao"
Else ' Se a pgina j foi carregada, verifica se deve incrementar ou decrementar o
contador de pginas
if Request("Navegacao") = "Proxima" then
Session("Pagina") = Session("Pagina") + 1
Else
If Request("Navegacao") = "Anterior" then
Session("Pagina") = Session("Pagina") - 1
End If
End If
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.CursorLocation = 3 ' adUseClient
Conn.Open ConnectString
Set rstTemp = Server.CreateObject("ADODB.Recordset")
rstTemp.CacheSize = 20
rstTemp.PageSize = 20
sql = "Select * from tabela"
rstTemp.Open Sql, Conn
MostraDados
End If
Sub MostraDados()
Dim Contador
rstTemp.AbsolutePage = Session("Pagina") ' vai para o nmero da pgina que est
armazenado em session("pagina")
Response.Write "Existem " & rstTemp.RecordCount & " registros na tabela - Mostrando
pgina " & Session("Pagina") & " de " & rstTemp.PageCount
If Session("Pagina") <> 1 then
response.write "<a href=""Paginacao.asp?Navegacao=Anterior""> [ Anterior ] "
End If
If Session("Pagina") <> rstTemp.PageCount then
response.write "<a href=""Paginacao.asp?Navegacao=Proxima"">[ Proxima ] "
End If
response.write "
"
For contador = 1 to 20
Response.Write rstTemp("campo") & "
"
rstTemp.MoveNext
If rstTemp.Eof then Exit For

Next
End Sub
%>

A primeira linha importante do cdigo


If Session("PrimeiraVez") <> "Nao" then
Esta linha verifica se Session("PrimeiraVez") possui o contedo "No" para saber se a
primeira vez ou no que a pgina est sendo carregada. Quando a pgina for
carregada pela primeira vez, Session("PrimeiraVez") ainda no existir, ento a
condio Session("PrimeiraVez") <> "Nao" obrigatoriamente ser verdadeira, o
que far com que o ASP processe as linhas imediatamente abaixo ao If at encontrar o
Else.
As prximas linhas definem os objetos RecordSet e Connection. Note que as
propriedades CacheSize e PageSize foram setadas com o mesmo valor. A nica
proprieade que realmente precisa ser setada PageSize, que vai dizer quantos
registros aparecero na pgina, mas por razes de desempenho, recomendo atribuir o
mesmo valor de PageSize CacheSize. PARA MAIORES INFORMAES LEIA O ARTIGO
Otimizando o desempenho de suas consultas ( propriedade CacheSize )
<http://www.aspbrasil.com.br/ver_tutorial.asp?tutorial=41> .
Depois disso, Session("PrimeiraVez") tem seu valor setado para "Nao". Esta uma das
chaves do funcionamento deste cdigo, pois quando o usurio clicar no link que vai
para a prxima pgina, o browser recarregar a pgina e verificar que ela j foi
carregada uma vez e saber que dever desviar o processamento para a poro Else
do If.
Na poro Else, o procedimento semelhante. A diferena que precisamos verificar o
valor da varivel "navegao" que tem seu valor preenchido quando o usurio clicar
em um dos links "Anterior" ou "Prxima", que nos permitir saber se devemos
incrementar ou diminuir o valor da propriedade AbsolutePage.

Anda mungkin juga menyukai