Paginación ASP

23/11/2006 - 21:37 por Miguel | Informe spam
Tengo el siguiente codigo en esta página de asp que tomé de un ejemplo que
encontré en Internet en www.aspfacil.com. Consiste en que llamo esta página
desde otra pasando los valores de las variable, entonces me crea una
paginación con los resultados, el problema que presento es que la primera
página me la presenta, pero las siguientes no me dan los resultados, noté es
que los valores de las variables se pierden cuando paso a la siguiente
paginación, ¿Cómo podría solucionar esto?


Gracias

<%
' Páginas en un recordset

Dim Periodo, Asignatura
Dim oConn, rs, SQL
Dim PaginaActual ' en qu página estamos
Dim PaginasTotales ' cuantas páginas tenemos
Dim TamPagina ' cuantos registros por página
Dim CuantosRegistros ' para imprimir solo el no. de registro por
página que queramos

Periodo=Request.Form("Periodo")
Asignatura=Request.Form("Asignatura")

'MODIFICAR AQUI PARA CAMBIAR EL No. DE REGISTRO POR PAGINA
TamPagina

'Leemos qué página mostrar. La primera vez ser la inicial
if Request.Querystring("pagina")="" then
PaginaActual=1
else
PaginaActual=CInt(Request.Querystring("pagina"))
end if

set oConn=Server.CreateObject("ADODB.Connection")
set rs=Server.CreateObject("ADODB.Recordset")

' Conexin por OLEDB
oConn.Open "DRIVER={SQL
Server};SERVER=miservidor;DATABASE=mibasededatos;UID=miusuario;PWD=mipassword"
SQL="SELECT * FROM Calificacion LEFT JOIN Estudiante ON
Calificacion.Matricula = Estudiante.Matricula LEFT JOIN Asignatura ON
Asignatura = Codigo WHERE Calificacion.Periodo = '"&Periodo&"' AND
Calificacion.Asignatura = '"&Asignatura&"' ORDER BY Periodo,
Calificacion.Matricula"
' Defino el tamaño de las páginas
rs.PageSize=TamPagina
rs.CacheSize=TamPagina

' Abro el recordset
rs.Open SQL, oConn, 1, 2

'Cuento las páginas
PaginasTotales=rs.PageCount

'Compruebo que la página actual está en el rango
if PaginaActual < 1 then
PaginaActual = 1
end if
if PaginaActual > PaginasTotales then
PaginaActual = PaginasTotales
end if

'Por si la consulta no devuelve registros!

if PaginasTotales=0 then

Response.Write("No se encontraron resultados.")

else

'Vamos a paginar
rs.AbsolutePage=PaginaActual
Response.Write("PAGINA " & PaginaActual & " DE " & PaginasTotales)
Response.Write("<br><br>")
Response.Write("<TABLE BORDER=""1"" ALIGN=""center""
STYLE=""font-size:75%"" ""BORDERCOLOR=#000000"">")
Response.Write("<CAPTION><B>RESULTADOS DE CALIFICACIONES</B></CAPTION>")
Response.Write("<TR><TD COLSPAN=""3""><B>PERIODO:
</B>"&rs.Fields("Periodo")&"</TD>")
Response.Write("<TR><TD COLSPAN=""3""><B>ASIGNATURA:
</B>"&rs.Fields("Descripcion")&"</TD>")
Response.Write("<TR><TD COLSPAN=""3"" BGCOLOR=""#475F70""
STYLE=""COLOR:#FFFFFF""><B>MATRICULA</B></TD>")
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#475F70""
STYLE=""COLOR:#FFFFFF""><B>NOMBRE</B></TD>")
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#475F70""
STYLE=""COLOR:#FFFFFF""><B>ASISTENCIA</B></TD>")
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#475F70""
STYLE=""COLOR:#FFFFFF""><B>TRABAJO PRACTICO</B></TD>")
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#475F70""
STYLE=""COLOR:#FFFFFF""><B>EXAMEN PARCIAL</B></TD>")
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#475F70""
STYLE=""COLOR:#FFFFFF""><B>EXAMEN FINAL</B></TD>")
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#475F70""
STYLE=""COLOR:#FFFFFF""><B>CALIFICACION</B></TD>")
CuantosRegistros=0
do while not rs.EOF and CuantosRegistros < TamPagina
'Pinto una lnea de la tabla por cada registro
Response.Write("<TR>"&VbCrLf)
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#CBEBDE""
STYLE=""#000000"">"&rs.Fields("Matricula")&"</TD>")
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#CBEBDE""
STYLE=""#000000"">"&rs.Fields("Nombre")&"</TD>")
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#CBEBDE""
STYLE=""#000000"">"&rs.Fields("Asistencia")&"</TD>")
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#CBEBDE""
STYLE=""#000000"">"&rs.Fields("TrabajoPractico")&"</TD>")
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#CBEBDE""
STYLE=""#000000"">"&rs.Fields("ExamenParcial")&"</TD>")
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#CBEBDE""
STYLE=""#000000"">"&rs.Fields("ExamenFinal")&"</TD>")
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#CBEBDE""
STYLE=""#000000"">"&rs.Fields("Asistencia") + rs.Fields("TrabajoPractico") +
rs.Fields("ExamenParcial") + rs.Fields("ExamenFinal")&"</TD>")
Response.Write("</TR>")
CuantosRegistros=CuantosRegistros+1
rs.MoveNext
loop
Response.Write("</TABLE>")

end if
rs.Close
oConn.Close
set rs=nothing
set oConn=nothing

'Muestro los enlaces
Response.Write("<hr>")
if PaginaActual > 1 then
Response.Write("<A HREF=calificacion.asp?pagina="& PaginaActual-1& ">10
Anteriores</A>&nbsp;&nbsp;&nbsp;")
end if
if PaginaActual < PaginasTotales then
Response.Write("<A HREF=calificacion.asp?pagina=" & PaginaActual+1 &">10
Siguientes</A>")
end if
%>

<a href="VOLVER.htm">
Inicio
</a>

Preguntas similare

Leer las respuestas

#6 Miguel
24/11/2006 - 18:25 | Informe spam
Gracias Dani funcionó perfectamente con la última opción.

"Dani Castillo" <danicastilloarrobahotmail.com> wrote in message
news:
Hola, el problema es que al paginar vas cambiando de pagina a pagina con
enlaces y el valor de request.form se pierde (ya que solo vale para la
pagina inmediata despues de un formulario)

una solucion seria modificar todos los enlaces a paginas para que
arrastraran el valor de esas variables (periodo y asignatura) y recuperar
su
valor con request (sin .form ni .querystring para que tome cualquiera de
ambas opciones)

otra opcion menos "formal" pero valida es pasar esos valores por session,
algo como

if request.form("Periodo")<>"" then
Periodo=Request.Form("Periodo")
Session("Periodo")=Periodo
else
Periodo=Session("Periodo")
end if

(y lo mismo para asignatura y resto de opciones)


_____________________
Dani
_____________________
"Miguel" escribió en el mensaje
news:
Tengo el siguiente codigo en esta página de asp que tomé de un ejemplo
que
encontré en Internet en www.aspfacil.com. Consiste en que llamo esta


página
desde otra pasando los valores de las variable, entonces me crea una
paginación con los resultados, el problema que presento es que la primera
página me la presenta, pero las siguientes no me dan los resultados, noté


es
que los valores de las variables se pierden cuando paso a la siguiente
paginación, ¿Cómo podría solucionar esto?


Gracias

<%
' Páginas en un recordset

Dim Periodo, Asignatura
Dim oConn, rs, SQL
Dim PaginaActual ' en qu página estamos
Dim PaginasTotales ' cuantas páginas tenemos
Dim TamPagina ' cuantos registros por página
Dim CuantosRegistros ' para imprimir solo el no. de registro por
página que queramos

Periodo=Request.Form("Periodo")
Asignatura=Request.Form("Asignatura")

'MODIFICAR AQUI PARA CAMBIAR EL No. DE REGISTRO POR PAGINA
TamPagina

'Leemos qué página mostrar. La primera vez ser la inicial
if Request.Querystring("pagina")="" then
PaginaActual=1
else
PaginaActual=CInt(Request.Querystring("pagina"))
end if

set oConn=Server.CreateObject("ADODB.Connection")
set rs=Server.CreateObject("ADODB.Recordset")

' Conexin por OLEDB
oConn.Open "DRIVER={SQL



Server};SERVER=miservidor;DATABASE=mibasededatos;UID=miusuario;PWD=mipasswor
d"
SQL="SELECT * FROM Calificacion LEFT JOIN Estudiante ON
Calificacion.Matricula = Estudiante.Matricula LEFT JOIN Asignatura ON
Asignatura = Codigo WHERE Calificacion.Periodo = '"&Periodo&"' AND
Calificacion.Asignatura = '"&Asignatura&"' ORDER BY Periodo,
Calificacion.Matricula"
' Defino el tamaño de las páginas
rs.PageSize=TamPagina
rs.CacheSize=TamPagina

' Abro el recordset
rs.Open SQL, oConn, 1, 2

'Cuento las páginas
PaginasTotales=rs.PageCount

'Compruebo que la página actual está en el rango
if PaginaActual < 1 then
PaginaActual = 1
end if
if PaginaActual > PaginasTotales then
PaginaActual = PaginasTotales
end if

'Por si la consulta no devuelve registros!

if PaginasTotales=0 then

Response.Write("No se encontraron resultados.")

else

'Vamos a paginar
rs.AbsolutePage=PaginaActual
Response.Write("PAGINA " & PaginaActual & " DE " & PaginasTotales)
Response.Write("<br><br>")
Response.Write("<TABLE BORDER=""1"" ALIGN=""center""
STYLE=""font-size:75%"" ""BORDERCOLOR=#000000"">")
Response.Write("<CAPTION><B>RESULTADOS DE CALIFICACIONES</B></CAPTION>")
Response.Write("<TR><TD COLSPAN=""3""><B>PERIODO:
</B>"&rs.Fields("Periodo")&"</TD>")
Response.Write("<TR><TD COLSPAN=""3""><B>ASIGNATURA:
</B>"&rs.Fields("Descripcion")&"</TD>")
Response.Write("<TR><TD COLSPAN=""3"" BGCOLOR=""#475F70""
STYLE=""COLOR:#FFFFFF""><B>MATRICULA</B></TD>")
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#475F70""
STYLE=""COLOR:#FFFFFF""><B>NOMBRE</B></TD>")
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#475F70""
STYLE=""COLOR:#FFFFFF""><B>ASISTENCIA</B></TD>")
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#475F70""
STYLE=""COLOR:#FFFFFF""><B>TRABAJO PRACTICO</B></TD>")
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#475F70""
STYLE=""COLOR:#FFFFFF""><B>EXAMEN PARCIAL</B></TD>")
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#475F70""
STYLE=""COLOR:#FFFFFF""><B>EXAMEN FINAL</B></TD>")
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#475F70""
STYLE=""COLOR:#FFFFFF""><B>CALIFICACION</B></TD>")
CuantosRegistros=0
do while not rs.EOF and CuantosRegistros < TamPagina
'Pinto una lnea de la tabla por cada registro
Response.Write("<TR>"&VbCrLf)
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#CBEBDE""
STYLE=""#000000"">"&rs.Fields("Matricula")&"</TD>")
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#CBEBDE""
STYLE=""#000000"">"&rs.Fields("Nombre")&"</TD>")
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#CBEBDE""
STYLE=""#000000"">"&rs.Fields("Asistencia")&"</TD>")
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#CBEBDE""
STYLE=""#000000"">"&rs.Fields("TrabajoPractico")&"</TD>")
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#CBEBDE""
STYLE=""#000000"">"&rs.Fields("ExamenParcial")&"</TD>")
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#CBEBDE""
STYLE=""#000000"">"&rs.Fields("ExamenFinal")&"</TD>")
Response.Write("<TD COLSPAN=""3"" BGCOLOR=""#CBEBDE""
STYLE=""#000000"">"&rs.Fields("Asistencia") +
rs.Fields("TrabajoPractico")


+
rs.Fields("ExamenParcial") + rs.Fields("ExamenFinal")&"</TD>")
Response.Write("</TR>")
CuantosRegistros=CuantosRegistros+1
rs.MoveNext
loop
Response.Write("</TABLE>")

end if
rs.Close
oConn.Close
set rs=nothing
set oConn=nothing

'Muestro los enlaces
Response.Write("<hr>")
if PaginaActual > 1 then
Response.Write("<A HREF=calificacion.asp?pagina="& PaginaActual-1& ">10
Anteriores</A>&nbsp;&nbsp;&nbsp;")
end if
if PaginaActual < PaginasTotales then
Response.Write("<A HREF=calificacion.asp?pagina=" & PaginaActual+1 &">10
Siguientes</A>")
end if
%>

<a href="VOLVER.htm">
Inicio
</a>






Respuesta Responder a este mensaje
#7 Dani Castillo
24/11/2006 - 20:59 | Informe spam
La solucion con session es "buena pero no optima" las variables de sesion
son comodas y practicas (y en algunos casos practicamente irremplazables)
pero requieren espacio en la memoria del servidor (una copia por cada
cliente conectado) asi que en general intenta evitarlas para estas cosas :-)

normalmente una paginacion puede conseguirse sin recurrir a esas variables,
consiguiendo montar la cadena de enlace con algo como
listado.asp?pagina=5&periodo=

y pasarlas por query

Las session pueden darte problemas y disgustos en determinados entornos
(ejemplo: dos listados simultaneos abiertos por el mismo cliente partiendo
de la misma ventana base, comparten variables de session y uno
sobreescribira las session del otro)

___________________________
Dani Castillo

Mis Fotos:
http://picasaweb.google.com/dcdani
___________________________
"Miguel" escribió en el mensaje
news:e9hoC2%
Gracias Dani funcionó perfectamente con la última opción.

"Dani Castillo" <danicastilloarrobahotmail.com> wrote in message
news:
Hola, el problema es que al paginar vas cambiando de pagina a pagina con
enlaces y el valor de request.form se pierde (ya que solo vale para la
pagina inmediata despues de un formulario)

una solucion seria modificar todos los enlaces a paginas para que
arrastraran el valor de esas variables (periodo y asignatura) y recuperar
su
valor con request (sin .form ni .querystring para que tome cualquiera de
ambas opciones)

otra opcion menos "formal" pero valida es pasar esos valores por session,
algo como

if request.form("Periodo")<>"" then
Periodo=Request.Form("Periodo")
Session("Periodo")=Periodo
else
Periodo=Session("Periodo")
end if

(y lo mismo para asignatura y resto de opciones)


_____________________
Dani
_____________________
"Miguel" escribió en el mensaje
news:
Tengo el siguiente codigo en esta página de asp que tomé de un ejemplo
que
encontré en Internet en www.aspfacil.com. Consiste en que llamo esta


página
desde otra pasando los valores de las variable, entonces me crea una
paginación con los resultados, el problema que presento es que la
primera
página me la presenta, pero las siguientes no me dan los resultados,
noté


es
que los valores de las variables se pierden cuando paso a la siguiente
paginación, ¿Cómo podría solucionar esto?


Gracias

<%
' Páginas en un recordset

Dim Periodo, Asignatura
Dim oConn, rs, SQL
Dim PaginaActual ' en qu página estamos
Dim PaginasTotales ' cuantas páginas tenemos
Dim TamPagina ' cuantos registros por página
Dim CuantosRegistros ' para imprimir solo el no. de registro por
página que queramos

Periodo=Request.Form("Periodo")
Asignatura=Request.Form("Asignatura")

'MODIFICAR AQUI PARA CAMBIAR EL No. DE REGISTRO POR PAGINA
TamPagina

'Leemos qué página mostrar. La primera vez ser la inicial
if Request.Querystring("pagina")="" then
PaginaActual=1
else
PaginaActual=CInt(Request.Querystring("pagina"))
end if

set oConn=Server.CreateObject("ADODB.Connection")
set rs=Server.CreateObject("ADODB.Recordset")

' Conexin por OLEDB
oConn.Open "DRIVER={SQL



Server};SERVER=miservidor;DATABASE=mibasededatos;UID=miusuario;PWD=mipasswor
d"
SQL="SELECT * FROM Calificacion LEFT JOIN Estudiante ON
Calificacion.Matricula = Estudiante.Matricula LEFT JOIN Asignatura ON
Asignatura = Codigo WHERE Calificacion.Periodo = '"&Periodo&"' AND
Calificacion.Asignatura = '"&Asignatura&"' ORDER BY Periodo,
Calificacion.Matricula"
' Defino el tamaño de las páginas
rs.PageSize=TamPagina
rs.CacheSize=TamPagina

' Abro el recordset
rs.Open SQL, oConn, 1, 2

'Cuento las páginas
PaginasTotales=rs.PageCount

'Compruebo que la página actual está en el rango
if PaginaActual < 1 then
PaginaActual = 1
end if
if PaginaActual > PaginasTotales then
PaginaActual = PaginasTotales
end if

'Por si la consulta no devuelve registros!

if PaginasTotales=0 then

Response.Write("No se encontraron resultados.")

else

'Vamos a paginar
Respuesta Responder a este mensaje
#8 Miguel
24/11/2006 - 22:21 | Informe spam
Excelente, funciona perfecto, gracias.
"Dani Castillo" wrote in message
news:
La solucion con session es "buena pero no optima" las variables de sesion
son comodas y practicas (y en algunos casos practicamente irremplazables)
pero requieren espacio en la memoria del servidor (una copia por cada
cliente conectado) asi que en general intenta evitarlas para estas cosas
:-)

normalmente una paginacion puede conseguirse sin recurrir a esas
variables, consiguiendo montar la cadena de enlace con algo como
listado.asp?pagina=5&periodo=

y pasarlas por query

Las session pueden darte problemas y disgustos en determinados entornos
(ejemplo: dos listados simultaneos abiertos por el mismo cliente partiendo
de la misma ventana base, comparten variables de session y uno
sobreescribira las session del otro)

___________________________
Dani Castillo

Mis Fotos:
http://picasaweb.google.com/dcdani
___________________________
"Miguel" escribió en el mensaje
news:e9hoC2%
Gracias Dani funcionó perfectamente con la última opción.

"Dani Castillo" <danicastilloarrobahotmail.com> wrote in message
news:
Hola, el problema es que al paginar vas cambiando de pagina a pagina con
enlaces y el valor de request.form se pierde (ya que solo vale para la
pagina inmediata despues de un formulario)

una solucion seria modificar todos los enlaces a paginas para que
arrastraran el valor de esas variables (periodo y asignatura) y
recuperar su
valor con request (sin .form ni .querystring para que tome cualquiera de
ambas opciones)

otra opcion menos "formal" pero valida es pasar esos valores por
session,
algo como

if request.form("Periodo")<>"" then
Periodo=Request.Form("Periodo")
Session("Periodo")=Periodo
else
Periodo=Session("Periodo")
end if

(y lo mismo para asignatura y resto de opciones)


_____________________
Dani
_____________________
"Miguel" escribió en el mensaje
news:
Tengo el siguiente codigo en esta página de asp que tomé de un ejemplo
que
encontré en Internet en www.aspfacil.com. Consiste en que llamo esta


página
desde otra pasando los valores de las variable, entonces me crea una
paginación con los resultados, el problema que presento es que la
primera
página me la presenta, pero las siguientes no me dan los resultados,
noté


es
que los valores de las variables se pierden cuando paso a la siguiente
paginación, ¿Cómo podría solucionar esto?


Gracias

<%
' Páginas en un recordset

Dim Periodo, Asignatura
Dim oConn, rs, SQL
Dim PaginaActual ' en qu página estamos
Dim PaginasTotales ' cuantas páginas tenemos
Dim TamPagina ' cuantos registros por página
Dim CuantosRegistros ' para imprimir solo el no. de registro
por
página que queramos

Periodo=Request.Form("Periodo")
Asignatura=Request.Form("Asignatura")

'MODIFICAR AQUI PARA CAMBIAR EL No. DE REGISTRO POR PAGINA
TamPagina

'Leemos qué página mostrar. La primera vez ser la inicial
if Request.Querystring("pagina")="" then
PaginaActual=1
else
PaginaActual=CInt(Request.Querystring("pagina"))
end if

set oConn=Server.CreateObject("ADODB.Connection")
set rs=Server.CreateObject("ADODB.Recordset")

' Conexin por OLEDB
oConn.Open "DRIVER={SQL



Server};SERVER=miservidor;DATABASE=mibasededatos;UID=miusuario;PWD=mipasswor
d"
SQL="SELECT * FROM Calificacion LEFT JOIN Estudiante ON
Calificacion.Matricula = Estudiante.Matricula LEFT JOIN Asignatura ON
Asignatura = Codigo WHERE Calificacion.Periodo = '"&Periodo&"' AND
Calificacion.Asignatura = '"&Asignatura&"' ORDER BY Periodo,
Calificacion.Matricula"
' Defino el tamaño de las páginas
rs.PageSize=TamPagina
rs.CacheSize=TamPagina

' Abro el recordset
rs.Open SQL, oConn, 1, 2

'Cuento las páginas
PaginasTotales=rs.PageCount

'Compruebo que la página actual está en el rango
if PaginaActual < 1 then
PaginaActual = 1
end if
if PaginaActual > PaginasTotales then
PaginaActual = PaginasTotales
end if

'Por si la consulta no devuelve registros!

if PaginasTotales=0 then

Response.Write("No se encontraron resultados.")

else

'Vamos a paginar








email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida