Foros del Web » Programando para Internet » ASP Clásico »

paginacion: uso de cahesize

Estas en el tema de paginacion: uso de cahesize en el foro de ASP Clásico en Foros del Web. no entiendo bien ciertas cosas puntuales de paginacion y para colmo nadie me contesta, aca va algo que se me ocurrio, lo probe, y no ...
  #1 (permalink)  
Antiguo 02/08/2002, 17:33
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 22 años, 10 meses
Puntos: 0
paginacion: uso de cahesize

no entiendo bien ciertas cosas puntuales de paginacion y para colmo nadie me contesta, aca va algo que se me ocurrio, lo probe, y no termino de entender:

en una bd 4 reg defini un cahesize=1
abri el rs
defini pagesize=1 y absolute page lo fui incrementendo, por lo que tendria un pagecount =4
esta es mi duda: cuando hago un while not eof en cada absolutepage, me muestra todos los reg de la bd a partir del reg de bd numero=absolutepage. esto se ve que pasa en todos los ejemplos que vi porque ademas del not eof le agregan al while i<pagesize, lo que me daria lo que quiero

o sea, para que sirve cachesize si en una pagina donde solo quiero mostrar un reg de la bd me esta mostrando ese y todos los siguientes, o por lo menos si no los muestro tengo la info ahi, para nada?

urjose, busque y busque, pero no hay info detallada sobre esto, solo ejemplos como este.
asique probe y aca estoy, sin entender. ta bien?

gracias de antemano.
  #2 (permalink)  
Antiguo 02/08/2002, 17:40
 
Fecha de Ingreso: enero-2002
Mensajes: 189
Antigüedad: 23 años, 3 meses
Puntos: 0
Re: paginacion: uso de cahesize

Hola:

El valor cachesize le indica al servidor que tome solo esa cantidad de registros, es decir, si mi consulta original tiene 100 registros pero el cachesize es 20, solo me trae solo 20 desde la bd, esto es con el fin de no sobrecargar la memoria con datos que en ese momento no necesito. La observación que indica es normal, cuando comienzas a recorrer tu recordset y pasar el valor del cachesize de la página, automaticamente traera la siguiente pagina, por ejemplo..
si estoy en la pagina absoluta 3, entonces al llegar al registros 30, el siguiente movenext traera automaticamante la siguiente página, por lo tanto tu algoritmo siempre debe de restrigir ese recorrido a pesar que hayas definido un pagesize.

saludos!!
  #3 (permalink)  
Antiguo 02/08/2002, 18:06
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 22 años, 10 meses
Puntos: 0
Re: paginacion: uso de cahesize

1)queres decir que hasta que no hago el siguiente movenext en mi pagina solo tengo los valores del primer grupo de reg?

2)en el caso de mi pagina sencilla con cachesize=1, lo que pasa es que antes del primer movenext solo tengo un reg de la bd?

3)y que luego del movenext tengo otro mas?

4)o sea que con cada movenext hago una peticion al servidor?

5)como es eso? si el rs lo cree una sola vez)

6)por ultimo, existe alguna forma de comprobar quwe en memoria solo hay disponible un reg antes del movenext?

perdon por atormentarte con tantas preguntas, pero sos el unico y tengo que aprovechar. si es posible contestamelas asi 1) 2) 3) si? Para entender bien y que no me queden dudas.

Te agradezco muchisimo la ayuda
  #4 (permalink)  
Antiguo 02/08/2002, 18:51
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 22 años, 10 meses
Puntos: 0
Re: paginacion: uso de cahesize

ademas:
no me queda claro esto que contradice lo que venia aprendiendo:

defini un cachesize de 1
abri el rs
hice rs_array=rs.getrows
cerre el rs

teoricamente como no llame a movenext, solo tengo un reg en el rs.
pero cuando hago ubound(array,2)+1 me da como resultado la totalidad de los reg, o sea que el array tiene info de mas reg que cachesize. pero como? acaso no hice rs_array=rs.getrows y rs tenia un solo reg en ese momento?
  #5 (permalink)  
Antiguo 02/08/2002, 19:51
 
Fecha de Ingreso: enero-2002
Mensajes: 189
Antigüedad: 23 años, 3 meses
Puntos: 0
Re: paginacion: uso de cahesize

Hola:

Te habia respondido inmediatamento pero no salio... plop!!

Primero, hablemos un poco del recordset.
Antes de ejecutar una consulta se puede definir que tipo de cursor se va a usar.
rstSource.CursorLocation = adUseServer o
rstSource.CursorLocation = adUseClient

en el primer caso el resultado de la consulta se almacena en el cliente y en el segundo caso se almacena en el servidor, manteniendo una conexion en linea mientras manejas el recordset, por lo que si cierras el recordset pierdes la información.

Para páginar hay 2 atributos mas.
pagesize= tamaño de cada página
cachesize = tamaña de registros a traer

por defecto los dos valores deben ser iguales para no traer registros demás que no vayas a usar en ese momento.

Si usas cursor de cliente, traeras toda la info a pesar de haber definido un pagesize/cachesize de menor tamaño que la consulta original. Si usas cursor de servidor y a la vez pagesize/cachesize solo traeras el número de registros definido en pagesize/cachesize, pero no debes de cerrar el recordset si quieres seguir manejando las demás páginas. El proceso de traer las paginas del servidor al cliente es transparante.

Los valores de recordcount siempre seran el total de registros de la consulta original no importando si hayas usado pagesize/cachesize o no.

mas información lo encontraras buscando temas relacionados a "cursores" o "paginacion"

Te envio un codigo que pagina en componente y usa el bendito pagesize y veras que tengo que controlar el barrido superior del recordset a pesar de haber usado pagesize..

Espero haber podido ayudar en algo y no confudirte.

saludos.
  #6 (permalink)  
Antiguo 02/08/2002, 19:54
 
Fecha de Ingreso: enero-2002
Mensajes: 189
Antigüedad: 23 años, 3 meses
Puntos: 0
Re: paginacion: uso de cahesize

'Metodo que ejecuta un sp y devuelve un recordset paginado
Public Function execProcedurePage(ByVal intNumReg As Integer, ByVal intNumPag As Integer, ByRef intNumPagTot As Variant, ByRef intNumRegTot As Variant, ByVal strSP As String, ParamArray params() As Variant) As ADODB.Recordset

On Error GoTo Exception

'Declarando objetos Origen
Dim rstSource As ADODB.Recordset
Dim rstDestino As ADODB.Recordset
Dim cmd As ADODB.Command
Dim intPos, intPosicionFinal As Byte

'Instanciando objetos ADO
Set rstSource = CreateObject("ADODB.Recordset")
Set rstDestino = CreateObject("ADODB.Recordset")
Set cmd = CreateObject("ADODB.Command")

'Seteando parametros de objeto command
cmd.ActiveConnection = GetConnectionString()
cmd.CommandText = strSP
cmd.CommandType = adCmdStoredProc

'Asignando parametros
setParameter cmd, params

'Seteando parametros de objeto recordset
rstSource.CursorLocation = adUseServer 'cursor de servido
rstSource.CursorType = adOpenStatic
rstSource.LockType = adLockReadOnly

'Inicializando valores de paginación
rstSource.PageSize = intNumReg
rstSource.CacheSize = intNumReg

'Ejecutando operación
rstSource.Open cmd

'Creando recordset destino con la misma estructura de origen
For intPos = 0 To rstSource.Fields.Count - 1
rstDestino.Fields.Append rstSource.Fields(intPos).Name, rstSource.Fields(intPos).Type, rstSource.Fields(intPos).DefinedSize, rstSource.Fields(intPos).Attributes
Next

'Inicializando valores de paginación de objeto destino
If rstSource.RecordCount > 0 Then
intNumPagTot = rstSource.PageCount
intNumRegTot = rstSource.RecordCount
rstSource.AbsolutePage = intNumPag
intPosicionFinal = intNumReg * intNumPag
End If

  #7 (permalink)  
Antiguo 02/08/2002, 19:55
 
Fecha de Ingreso: enero-2002
Mensajes: 189
Antigüedad: 23 años, 3 meses
Puntos: 0
Re: paginacion: uso de cahesize

continuacion....

'Abriendo recordset para ingreso de datos
rstDestino.Open

'Insertando datos
While Not rstSource.EOF And rstSource.AbsolutePosition <= intPosicionFinal
rstDestino.AddNew
For intPos = 0 To rstDestino.Fields.Count - 1
rstDestino.Fields.Item(intPos).Value = Trim(rstSource.Fields(intPos).Value())
Next
rstDestino.Update
rstSource.MoveNext
Wend

'Asignando recordset
Set execProcedurePage = rstDestino

'Cerrando conexión
Set cmd.ActiveConnection = Nothing
rstSource.Close

'Destruyendo objetos
Set rstSource = Nothing
Set rstDestino = Nothing
Set cmd = Nothing

'Liberando recursos
ctx.SetComplete

'Finalizando funcion
Exit Function

Exception:

'Destruyendo objetos
Set rstSource = Nothing
Set rstDestino = Nothing
Set cmd = Nothing

'liberando recursos
ctx.SetAbort

'Lanzando error
Err.Raise Err.Number, Err.Source, Err.Description

End Function

saludos!!
  #8 (permalink)  
Antiguo 02/08/2002, 21:56
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 22 años, 10 meses
Puntos: 0
Re: paginacion: uso de cahesize

Infinitas GRACIAS
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:52.