|
Segunda, 9 de Dezembro de 2024 |
|
|
|
Consulta Paginada em ASP
Aqui temos uma breve descrição de uma solução em ASP para uma construção considerada
complicada de se fazer: A consulta paginada.
Para um melhor entendimento, será melhor uma leitura inicial da Publicação de
Padronização de Página ASP.
A melhor maneira de se fazer uma consulta paginada é concentrá-la numa única página
fonte, que será recarregada por si própria a cada mudança de página.
Note que a página em questão tem apenas UM parâmetro de entrada: O número da página.
Para a paginação em si este único parâmetro é suficiente. Poderão ser utilizados
outros parâmetros para programar a consulta a ser feita, mas para a paginação
não é necessário.
Não está sendo apresentado aqui o código completo de uma página e sim partes principais
do código, para entendimento.
1) Exemplo da área de definição da página:
' =========================< CONSTANTES >============================
' Quantidade de itens por página:
Const cQtdItemPag = 10
' ==========================< VARIÁVEIS >============================
' Número (Inteiro) da página atual:
dim NumPag
' Clausula Where da sua consulta SQL:
dim sWhere
2) Recepção de parâmetros e carga inicial das variáveis:
Caso o número da página recebida seja vazio ou não numérico, assumimos como sendo
1 (primeira página). Desta forma, quando a página for chamada pela primeira vez,
sem parâmetros, apresentará a primeira página da consulta:
Pag = Request("Pag")
' Se página não indicada, assume a 1 (um):
if Pag = "" then Pag = "1"
if IsNumeric(Pag) then
NumPag = CInt(Pag)
else
NumPag = 1
end if
A cláusula Where da consulta poderá ser fixa ou gerada a partir de outros parâmetros
recebidos. Ela é gerada como variável de página para simplificar, pois serão
necessárias duas consultas com a mesma seleção:
sWhere = " WHERE . . . "
3) Apresentação dos registros:
Para a apresentação dos registros será necessário fazer uma consulta a partir do
primeiro registro da página atual. Este registro pode ser calculado a partir do
número da página atual e da Quantidade de ítens por página.
Como alguns SQLs (como o Access), não tem um comando para fazer uma consulta a
partir de um dado registro, utiliza-se de um artifício para posicionar a consulta
até o registro desejado, fazendo um Loop de MoveNext.
Com a consulta aberta e posicionada, basta fazer outro Loop para apresentar
os dados:
sub GeraRegistros()
dim s, oRs
dim i, RegIni
' Inicializa o Recordset da Consulta:
s = "SELECT * FROM tbTabela " & sWhere
s = s & " ORDER BY . . . "
set oRs = oCn.Execute(s)
' Calcula e posiciona no registro inicial:
RegIni = (NumPag - 1) * cQtdItemPag
if RegIni > 0 then
for i = 1 to RegIni
if oRs.EOF then exit for
oRs.MoveNext
next
end if
' Gera até uma página da consulta,
' com os dados recolhidos de oRs:
for i = 1 to cQtdItemPag
if oRs.EOF then exit for
%>
. . .
<%
oRs.MoveNext
next
' Finaliza Consulta:
oRs.Close
Set oRs = Nothing
end sub
4) Links de Paginação:
Uma simples consulta na base nos indica quanto registros existem na consulta.
Com a quantidade de registros da consulta e a quantidade de ítens por página
calculamos quantas páginas existirão na consulta.
Sabendo a quantidade de registros podemos montar os Links das páginas da consulta.
Estes Links remeterão à própria página, passando o número da página desejada.
A página atual não é montada como Link. Os links Anterior e Próxima
aparecem como links, conforme a necessidade:
sub GeraPaginacao()
dim s, oRs
dim i, QtdReg, QtdPag
' Inicializa Vars:
QtdReg = 0
QtdPag = 1
' Inicializa o Recordset da Consulta atual:
s = "SELECT Count(*) AS QtdReg FROM tbTabela " & sWhere
set oRs = oCn.Execute(s)
if not oRs.EOF then
QtdReg = oRs("QtdReg")
QtdPag = Int((QtdReg - 1) / cQtdItemPag) + 1
if NumPag > 1 then
%>
<a href="JavaScript:SelPag('<%=(NumPag-1)%>')">Anterior</a>
<%
else
end if
for i = 1 to QtdPag
if i <> NumPag then
%>
<a href="JavaScript:SelPag('<%=i%>')"><%=i%></a>
<%
else
end if
next
if QtdPag > 1 and NumPag < QtdPag then
%>
<a href="JavaScript:SelPag('<%=(NumPag+1)%>')">Próxima</a>
<%
else
end if
end if
oRs.Close
Set oRs = Nothing
end sub
5) Código JavaScript:
A função JavaScript chamada nos Links, simplesmente irá carregar o número da página
dada como parâmetro no campo hidden "Pag", que deverá estar definido dentro
do form principal da página e submetê-la a ela mesma:
<Script Language=JavaScript>
function SelPag(Pagina){
var f = document.form;
f.Pag.value = Pagina;
f.action = "Nome da Pagina atual";
f.submit();
}
</Script>
¤ Links Relacionados:
- Padronização de Página em ASP
Gostou? Compartilhe ou comente:
|
|
|