USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Dicas

  ASP - Active Server Page    (Miscelâneas)

Título da Dica:  Dividir resultados de um Recorset por páginas
Postada em 9/10/2003 por ^HEAVY-METAL^            
Dúvida de muitos, como dividir resultados de um Recorset por páginas é aqui descrito na sua forma mais simples, e interessante, com descrição passo a passa, para que o programador saiba o que faz cada linha do script.

Não coloquei a BD para download, pois achei que seria simples demais, e iria demorar mais o download de um Script tão pequeno. Em sua vez deixo a descrição da mesma. Será portanto uma base de dados em Access, com uma tebela com o nome “Sites” e a seguinte estrutura:

ID | Numeração automática (Chave Primária)
NomeSite | Texto

Aconselho que implementem o script primeiro e depois vê-lo passo-a-passo.

Arquivo Default.asp:

<%
’Com a linha que se segue, temos de declarar todas as variáveis.
option explicit%>
<html>
<head><%
’Dimensionamos as variáveis
dim intRecsPerPage,sSQL,PaginaCount,Pagina,intRecord,
Iaa,KualPagina,rs,b

’Aqui definimos quantos resultado queremos por página, esta variável será usada posteriormente.
intRecsPerPage="10"

’Fazemos a ligação à BD via ODBC
set rs=Server.CreateObject("ADODB.Recordset")
sSQL="Select Sites.* from Sites Order by Sites.ID DESC"
rs.Open sSQL, "DSN=Directoria",3,3

‘Aqui como descrito anteriormente usamos a variável que define o número de resultados por página.
rs.PageSize=intRecsPerPage
’Verificamos quantas páginas
PaginaCount=rs.PageCount nos resultou.

‘O “Select” que se segue vai-nos permitir quais os resultados que o utilizador vai querer ver.
Select case request("kual")
’Caso o utilizador prefira voltar à página 1
Case "prime"
Pagina=1
’Para voltar à página anterior à actual.
case "anter"
’Aqui dizemos que é a página de onde veio, menos uma
Pagina=Request("Pagina")-1
’Para evitar erros, verificamos se o número da página é inferior a 1, e caso seja, definimos que a página a mostrar será a primeira.
if Pagina<1 then Pagina=1
’Funciona de modo idêntico à página anterior, mas neste caso será para a página posterior.
case "next"
Pagina=Request("Pagina")+1
’ Mais uma vez verificamos se a pagina é de valor maior ao número total de páginas (última), caso seja, definimos a página como a última.
if Pagina>PaginaCount then Pagina=PaginaCount
’Caso o utilizador queira ver a última, mostra-mos a última página.
case "ultim"
Pagina=PaginaCount
’ O caso seguinte é para uma página específica, seja ela a página 2,4 ou 5.
’ Neste caso não fazemos verificação, pois como iremos ver posteriormente, não será nescessário.
case "mesma"
Pagina=Request("Pagina")
’Se não for indicado nenhum dos casos anteriores, mostra-mos a primeira página com os resultados.
case else
Pagina=1
end Select
’Até aqui definimos um valor para a variável “Página”, agora vamos “dizer” ao “Script” qual página queremos ver.
rs.AbsolutePage=Pagina%>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF">
<!-- Fazemos uma espécie de relatório. -->
Página <%=Pagina%> de <%=PaginaCount%>.
<br>
<br>
<%
’ De seguida fazemos a apresentação dos valores que queremos mostrar, eu aqui apenas apresento um campo, como exemplo.
’Aqui dizemos que desde do número 1 até ao máximo de resultados por página, definidos anteriormente, fazer o ciclo.
for intRecord=1 to rs.PageSize
Response.write rs("NomeSite")&"<br>"
rs.MoveNext
’Se chegar-mos primeiro ao fim dos resultados da BD, Saímos do ciclo.
If rs.EOF then
Exit For
End if
next
’Fechamos a ligação, pois já não precisamos mais dela.
rs.Close

’Agora vamos fazer uma espécie de navegação.
’ Primeiro caso, se apenas resultar uma página, não há nescessidade de apresentar o menú.
IF PaginaCount=1 then

’ Caso seguinte, Primeira página.
’Neste caso apresentamos os números de 1 a 5, com os links para as páginas correspondentes, à exepção da página 1, pois é nela onde nos encontramos. Isto é devido ao “Sub Kuantas()”, que explicaremos mais à frente como funciona.
ElseIF Pagina=1 then
’Chamamos o Sub
call Kuantas()
’Mostramos os links para a página seguinte e última.
%>
[<a href="default.asp?Pagina=<%=Pagina%>&Kual=next">
Próxima</a>]
[<a href="default.asp?Pagina=<%=Pagina%>&Kual=ultim">
Última</a>]
<%
’ Agora verificamos se estamos na última página, pois, caso se verifique, não há necessidade de apresentar os links para a próxima e última páginas.
ElseIF ABS(Pagina)=ABS(PaginaCount) then
’ Caso se verifique a condição, Colocá-mos os links para a primeira e página anteriores.
%>
[<a href="default.asp?Pagina=<%=Pagina%>&Kual=prime">
Primeira</a>]
[<a href="default.asp?Pagina=<%=Pagina%>&Kual=anter">
Anterior</a>]
<%
’Chamamos o Sub que nos faz o painel com os números.
call Kuantas()

’ Se nenhuma das situações anteriores se verificar, apresentamos um menú com o link para a primeira e anterior páginas, bem como o painel dos números e links para as páginas seguinte e última.
Else
%>
[<a href="default.asp?Pagina=<%=Pagina%>&Kual=prime">
Primeira</a>]
[<a href="default.asp?Pagina=<%=Pagina%>&Kual=anter">
Anterior</a>]
<%
call Kuantas()
%>
[<a href="default.asp?Pagina=<%=Pagina%>&Kual=next">
Próxima</a>]
[<a href="default.asp?Pagina=<%=Pagina%>&Kual=ultim">
Última</a>]
<%
End If

’Agorao “Sub Kuantas()”
’Dámos-lhe o nome
sub kuantas()

’Para ser mais fácil de funcionar, criámos a variável Iaa, que fica com o valor da variável Pagina, a função ABS é nescessária, pois nas comparações que se farão de seguida, não funcionarão...
Iaa=ABS(Pagina)

’O seguinte “IF” Serve para nos podermos posicionar no painel, ou seja, se tivermos um grande número de páginas, a página em questão estará apresentada ao centro, e teremos mais duas páginas para trás e para a frente. A página selecciona estará sem link.
If Iaa-2=0 then
b=3
elseIf Iaa-3=0 then
b=2
elseIf Iaa-1=0 then
b=4
elseIF Iaa=ABS(PaginaCount) then
b=4
elseIF Iaa+1=ABS(PaginaCount) then
b=3
else
b=2
end if

’Cá está o ciclo que apresenta os números.
For KualPagina=(Iaa-b) to (Iaa+b)
’Se o número a apresentar, for menor que um, atribuimos-lhe o valor 1
if KualPagina<=0 then
KualPagina=1
End if
’Se a página for maior que o número total de páginas, já não prescisamos de apresentar mais nenhum link, pois não terá nenhum resultado para apresentar.
if KualPagina>PaginaCount then
exit for
End if
’Agora se o valor do número que vamos escrever for diferente do da página onde nos encontramos, atribuímos um link para a página em questão.
If not ABS(KualPagina)=ABS(Pagina) then
%>

<a href="default.asp?Pagina=<%=KualPagina%>&kual=mesma">
<%=KualPagina%></a>
<%
’Caso Contrário, escrevemos o número da página, mas sem link.
else
response.write Pagina
End IF
Next
End Sub
set rs=nothing

’Et Voilá, agora cabe à imaginação de cada um, o que poderá fazer com isto, e melhor, deixar de infestar o fórum com a mesma questão :)
%>
</body>
</html>

T+,
 


CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página