Paginación

18/07/2003 - 17:49 por Diego | Informe spam
Hola

He desarrollado un método con SQL server para paginar registros, sin
embargo, ando en busca del sistema más eficiente de paginación,

Podriamos entre todos compartir nuestros métodos de paginación?
El mio se basa en el uso de SQL, por ejemplo:


Select top 10 cd_tabla, descrip from tabla
where cd_tabla not in ( select top 20 cd_tabla from tabla )

Quien sabe como paginar de otra forma???

Gracias

Preguntas similare

Leer las respuestas

#1 Webmaster Tiendainformaticatotal.com
18/07/2003 - 20:03 | Informe spam
que es lo quieres hacer realmente, paginar x registros en cada pagina de tu
consulta SQL



Diego escribió en el mensaje de noticias

Hola

He desarrollado un método con SQL server para paginar registros, sin
embargo, ando en busca del sistema más eficiente de paginación,

Podriamos entre todos compartir nuestros métodos de paginación?
El mio se basa en el uso de SQL, por ejemplo:


Select top 10 cd_tabla, descrip from tabla
where cd_tabla not in ( select top 20 cd_tabla from tabla )

Quien sabe como paginar de otra forma???

Gracias


Respuesta Responder a este mensaje
#2 Webmaster Tiendainformaticatotal.com
18/07/2003 - 21:59 | Informe spam
ale pos aki lo tienes

sql="SELECT * FROM tabla"
RS.open sql,conexion,3,1
rspMax = CInt(rsprod.RecordCount)
if rspmax <> "0" then
'nº de registros a mostrar por pagina
mostrar = 6
rsprod.PageSize = mostrar
rsprod.CacheSize = mostrar
cant_registros = 0
if Request.Querystring("pg")="" then
pag_actual=1
else
pag_actual=CInt(Request.Querystring("pg"))
end if
pag_totales = rsprod.PageCount
if pag_actual < 1 then
pag_actual = 1
end if
if pag_actual > pag_totales then
pag_actual = pag_totales
end if
rsprod.AbsolutePage = pag_actual
end if
do while not rsprod.EOF and cant_registros < mostrar
response.write RS("columna")
cant_registros = cant_registros +1
RS.movenext
loop
RS.close
conexion.close
if pag_totales=0 then
Response.Write("<br><br><br><br><br><br>No se han encontrado noticias.")
else
if pag_actual > 1 then
Response.Write("<A HREF=web.asp?pg="& pag_actual-1 &">")
end if
Response.write ("Atras")
if pag_actual > 1 then
Response.Write("</A>")
end if
Response.Write(" | Página " & Pag_actual & " de " & pag_totales &" | ")
if pag_actual < pag_totales then
Response.Write("<A HREF=web.asp?pg="& pag_actual+1 &">")
end if
Response.write ("Siguiente")
if pag_actual > 1 then
Response.Write("</A>")
end if
end if

Diego escribió en el mensaje de noticias

Es decir mostrar registros de 10 en 10 de una tabla con 300.000
registros
Quisiera saber que estan utilizando para hacer esto.



"Webmaster Tiendainformaticatotal.com" escribió


en
el mensaje news:
> que es lo quieres hacer realmente, paginar x registros en cada pagina de
tu
> consulta SQL
>
>
>
> Diego escribió en el mensaje de noticias
>
> > Hola
> >
> > He desarrollado un método con SQL server para paginar registros, sin
> > embargo, ando en busca del sistema más eficiente de paginación,
> >
> > Podriamos entre todos compartir nuestros métodos de paginación?
> > El mio se basa en el uso de SQL, por ejemplo:
> >
> >
> > Select top 10 cd_tabla, descrip from tabla
> > where cd_tabla not in ( select top 20 cd_tabla from tabla )
> >
> > Quien sabe como paginar de otra forma???
> >
> > Gracias
> >
> >
>
>


Respuesta Responder a este mensaje
#3 Webmaster Tiendainformaticatotal.com
18/07/2003 - 23:08 | Informe spam
gracias, yo lo estoy usando con ACCESS, no con SQL SERVER

un saludo


Manuel Vera escribió en el mensaje de noticias

Este me parece mejor y más optimizado. Véanlo aquí...
http://www.4guysfromrolla.com/webte...99-1.shtml

Mi opinión se basa en que se evita enviar, por ejemplo, los 300 mil
registros del server hacia ADO para ADO los filtre. En vez de eso, el


mismo
SQL Server filtra los registros que quiere, de 10 en 10, 20 en 20 o como


te
guste. Así, solamente se devuelve ese conjunto desde SQL hacia el ADO,
ganando en performance, pues viaja menos data a traves de la red.

El ejemplo usando ADO para paginar es bueno para utilizarlo con Access,


pero
con SQL puedes mejorarlo con el que sale en el link de arriba.

Saludos
MV

Webmaster Tiendainformaticatotal.com wrote in
message news:
ale pos aki lo tienes

sql="SELECT * FROM tabla"
RS.open sql,conexion,3,1
rspMax = CInt(rsprod.RecordCount)
if rspmax <> "0" then
'nº de registros a mostrar por pagina
mostrar = 6
rsprod.PageSize = mostrar
rsprod.CacheSize = mostrar
cant_registros = 0
if Request.Querystring("pg")="" then
pag_actual=1
else
pag_actual=CInt(Request.Querystring("pg"))
end if
pag_totales = rsprod.PageCount
if pag_actual < 1 then
pag_actual = 1
end if
if pag_actual > pag_totales then
pag_actual = pag_totales
end if
rsprod.AbsolutePage = pag_actual
end if
do while not rsprod.EOF and cant_registros < mostrar
response.write RS("columna")
cant_registros = cant_registros +1
RS.movenext
loop
RS.close
conexion.close
if pag_totales=0 then
Response.Write("<br><br><br><br><br><br>No se han encontrado noticias.")
else
if pag_actual > 1 then
Response.Write("<A HREF=web.asp?pg="& pag_actual-1 &">")
end if
Response.write ("Atras")
if pag_actual > 1 then
Response.Write("</A>")
end if
Response.Write(" | Página " & Pag_actual & " de " & pag_totales &" | ")
if pag_actual < pag_totales then
Response.Write("<A HREF=web.asp?pg="& pag_actual+1 &">")
end if
Response.write ("Siguiente")
if pag_actual > 1 then
Response.Write("</A>")
end if
end if

Diego escribió en el mensaje de noticias

> Es decir mostrar registros de 10 en 10 de una tabla con 300.000
> registros
> Quisiera saber que estan utilizando para hacer esto.
>
>
>
> "Webmaster Tiendainformaticatotal.com" escribió
en
> el mensaje news:
> > que es lo quieres hacer realmente, paginar x registros en cada pagina


de
> tu
> > consulta SQL
> >
> >
> >
> > Diego escribió en el mensaje de noticias
> >
> > > Hola
> > >
> > > He desarrollado un método con SQL server para paginar registros, sin
> > > embargo, ando en busca del sistema más eficiente de paginación,
> > >
> > > Podriamos entre todos compartir nuestros métodos de paginación?
> > > El mio se basa en el uso de SQL, por ejemplo:
> > >
> > >
> > > Select top 10 cd_tabla, descrip from tabla
> > > where cd_tabla not in ( select top 20 cd_tabla from tabla )
> > >
> > > Quien sabe como paginar de otra forma???
> > >
> > > Gracias
> > >
> > >
> >
> >
>
>




Respuesta Responder a este mensaje
#4 TobleRone
19/07/2003 - 20:00 | Informe spam
El método de la gente de 4guysfromrolla es muy ingenioso. Pero tiene algunos
detalles negativos.

Hay 2 casos:

1) Cuando es necesario paginar sobre TODOS los registros de la tabla. En
dicho caso, si la tabla tiene una columna Identity, la solución es
totalmente trivial. Usas ese StoredProc y listo. Si la tabla no tiene Ident,
es necesario crear una tabla temporaria.

2) Cuando es necesario paginar sobre una consulta compleja. O sea, ejecutar
una consulta compleja, que devuelve varios registros, y paginar sobre ellos.
Ahi tendriamos el mismo problema. El db engine tiene que crear una temp
table por cada conexión que abras, ejecutar el query, llenar la temp table,
y ejecutar el SP sobre ella para saber que pagina debe devolver.

Ya he probado todos estos escenarios, y creanme en el caso 2, no hay
ninguna diferencia de performance entre lo que dice ahi, y llevar toda la
consulta hacia un Recordset ADO y paginar desde ahi.

Saludos

"Manuel Vera" escribió en el mensaje
news:
Este me parece mejor y más optimizado. Véanlo aquí...
http://www.4guysfromrolla.com/webte...99-1.shtml

Mi opinión se basa en que se evita enviar, por ejemplo, los 300 mil
registros del server hacia ADO para ADO los filtre. En vez de eso, el


mismo
SQL Server filtra los registros que quiere, de 10 en 10, 20 en 20 o como


te
guste. Así, solamente se devuelve ese conjunto desde SQL hacia el ADO,
ganando en performance, pues viaja menos data a traves de la red.

El ejemplo usando ADO para paginar es bueno para utilizarlo con Access,


pero
con SQL puedes mejorarlo con el que sale en el link de arriba.

Saludos
MV

Webmaster Tiendainformaticatotal.com wrote in
message news:
ale pos aki lo tienes

sql="SELECT * FROM tabla"
RS.open sql,conexion,3,1
rspMax = CInt(rsprod.RecordCount)
if rspmax <> "0" then
'nº de registros a mostrar por pagina
mostrar = 6
rsprod.PageSize = mostrar
rsprod.CacheSize = mostrar
cant_registros = 0
if Request.Querystring("pg")="" then
pag_actual=1
else
pag_actual=CInt(Request.Querystring("pg"))
end if
pag_totales = rsprod.PageCount
if pag_actual < 1 then
pag_actual = 1
end if
if pag_actual > pag_totales then
pag_actual = pag_totales
end if
rsprod.AbsolutePage = pag_actual
end if
do while not rsprod.EOF and cant_registros < mostrar
response.write RS("columna")
cant_registros = cant_registros +1
RS.movenext
loop
RS.close
conexion.close
if pag_totales=0 then
Response.Write("<br><br><br><br><br><br>No se han encontrado noticias.")
else
if pag_actual > 1 then
Response.Write("<A HREF=web.asp?pg="& pag_actual-1 &">")
end if
Response.write ("Atras")
if pag_actual > 1 then
Response.Write("</A>")
end if
Response.Write(" | Página " & Pag_actual & " de " & pag_totales &" | ")
if pag_actual < pag_totales then
Response.Write("<A HREF=web.asp?pg="& pag_actual+1 &">")
end if
Response.write ("Siguiente")
if pag_actual > 1 then
Response.Write("</A>")
end if
end if

Diego escribió en el mensaje de noticias

> Es decir mostrar registros de 10 en 10 de una tabla con 300.000
> registros
> Quisiera saber que estan utilizando para hacer esto.
>
>
>
> "Webmaster Tiendainformaticatotal.com" escribió
en
> el mensaje news:
> > que es lo quieres hacer realmente, paginar x registros en cada pagina


de
> tu
> > consulta SQL
> >
> >
> >
> > Diego escribió en el mensaje de noticias
> >
> > > Hola
> > >
> > > He desarrollado un método con SQL server para paginar registros, sin
> > > embargo, ando en busca del sistema más eficiente de paginación,
> > >
> > > Podriamos entre todos compartir nuestros métodos de paginación?
> > > El mio se basa en el uso de SQL, por ejemplo:
> > >
> > >
> > > Select top 10 cd_tabla, descrip from tabla
> > > where cd_tabla not in ( select top 20 cd_tabla from tabla )
> > >
> > > Quien sabe como paginar de otra forma???
> > >
> > > Gracias
> > >
> > >
> >
> >
>
>




Respuesta Responder a este mensaje
#5 Manuel Vera
23/07/2003 - 16:42 | Informe spam
Aclaratorias y dudas en el texto.

TobleRone wrote in message
news:usV9i#
El método de la gente de 4guysfromrolla es muy ingenioso. Pero tiene algunos
detalles negativos.

Hay 2 casos:

1) Cuando es necesario paginar sobre TODOS los registros de la tabla. En
dicho caso, si la tabla tiene una columna Identity, la solución es
totalmente trivial. Usas ese StoredProc y listo. Si la tabla no tiene Ident,
es necesario crear una tabla temporaria.
R: No necesariamente si existe un Identity en la tabla yo necesito mostrar
ese ordenamiento o prioridad. Quizás necesite un ordenamiento por fecha,
alfabético u otro y no el orden de insersión de los registros como tal.

2) Cuando es necesario paginar sobre una consulta compleja. O sea, ejecutar
una consulta compleja, que devuelve varios registros, y paginar sobre ellos.
Ahi tendriamos el mismo problema. El db engine tiene que crear una temp
table por cada conexión que abras, ejecutar el query, llenar la temp table,
y ejecutar el SP sobre ella para saber que pagina debe devolver.
R: No veo aquí nada claro. No te entendí. Por lo general todas las
consultas, simples o complejas, devuelven conjuntos de registros o varios
registros. Por lo general se abre una sola conexión a la base de datos, por
lo tanto solo hay que abrir una sola conexión. Si se crean tablas temporales
en SQL Server cuando la consulta compleja así lo requiere, pero es usando el
método de 4guysfromrolla como pasando el string SQL directamnete al
Execute(). La verdad no entendí tu posición respecto al punto q marcaste
como 2.

Ya he probado todos estos escenarios, y creanme en el caso 2, no hay
ninguna diferencia de performance entre lo que dice ahi, y llevar toda la
consulta hacia un Recordset ADO y paginar desde ahi.

Saludos

"Manuel Vera" escribió en el mensaje
news:
Este me parece mejor y más optimizado. Véanlo aquí...
http://www.4guysfromrolla.com/webte...99-1.shtml

Mi opinión se basa en que se evita enviar, por ejemplo, los 300 mil
registros del server hacia ADO para ADO los filtre. En vez de eso, el


mismo
SQL Server filtra los registros que quiere, de 10 en 10, 20 en 20 o como


te
guste. Así, solamente se devuelve ese conjunto desde SQL hacia el ADO,
ganando en performance, pues viaja menos data a traves de la red.

El ejemplo usando ADO para paginar es bueno para utilizarlo con Access,


pero
con SQL puedes mejorarlo con el que sale en el link de arriba.

Saludos
MV

Webmaster Tiendainformaticatotal.com wrote in
message news:
ale pos aki lo tienes

sql="SELECT * FROM tabla"
RS.open sql,conexion,3,1
rspMax = CInt(rsprod.RecordCount)
if rspmax <> "0" then
'nº de registros a mostrar por pagina
mostrar = 6
rsprod.PageSize = mostrar
rsprod.CacheSize = mostrar
cant_registros = 0
if Request.Querystring("pg")="" then
pag_actual=1
else
pag_actual=CInt(Request.Querystring("pg"))
end if
pag_totales = rsprod.PageCount
if pag_actual < 1 then
pag_actual = 1
end if
if pag_actual > pag_totales then
pag_actual = pag_totales
end if
rsprod.AbsolutePage = pag_actual
end if
do while not rsprod.EOF and cant_registros < mostrar
response.write RS("columna")
cant_registros = cant_registros +1
RS.movenext
loop
RS.close
conexion.close
if pag_totales=0 then
Response.Write("<br><br><br><br><br><br>No se han encontrado noticias.")
else
if pag_actual > 1 then
Response.Write("<A HREF=web.asp?pg="& pag_actual-1 &">")
end if
Response.write ("Atras")
if pag_actual > 1 then
Response.Write("</A>")
end if
Response.Write(" | Página " & Pag_actual & " de " & pag_totales &" | ")
if pag_actual < pag_totales then
Response.Write("<A HREF=web.asp?pg="& pag_actual+1 &">")
end if
Response.write ("Siguiente")
if pag_actual > 1 then
Response.Write("</A>")
end if
end if

Diego escribió en el mensaje de noticias

> Es decir mostrar registros de 10 en 10 de una tabla con 300.000
> registros
> Quisiera saber que estan utilizando para hacer esto.
>
>
>
> "Webmaster Tiendainformaticatotal.com" escribió
en
> el mensaje news:
> > que es lo quieres hacer realmente, paginar x registros en cada pagina


de
> tu
> > consulta SQL
> >
> >
> >
> > Diego escribió en el mensaje de noticias
> >
> > > Hola
> > >
> > > He desarrollado un método con SQL server para paginar registros, sin
> > > embargo, ando en busca del sistema más eficiente de paginación,
> > >
> > > Podriamos entre todos compartir nuestros métodos de paginación?
> > > El mio se basa en el uso de SQL, por ejemplo:
> > >
> > >
> > > Select top 10 cd_tabla, descrip from tabla
> > > where cd_tabla not in ( select top 20 cd_tabla from tabla )
> > >
> > > Quien sabe como paginar de otra forma???
> > >
> > > Gracias
> > >
> > >
> >
> >
>
>




Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida