|
|
|

|

|
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+,
|
|
|
|

|