Bueno, después de un respiro de unas cuantas horas

vamos a descomponer nuestra función Listar, como ya explicamos anteriormente, esta función se encargará solamente de devolver una estructura ordenada de datos, y nos será muy útil para crear listas de usuarios a lo largo de nuestra aplicacón, pero vamos al código:
Nuestro nuevo método recibe 3 argumentos
1. Número actual de página
2. Número esperado de registros por página
3. Variable alternativa de ordenación
Nótese que este método es público, como ya lo explicamos en su momento, será visible desde el exterior de nuestra clase.
Código:
Public function Listar(intPagina, intTamanoPagina, strOrdenar)
Nuestro query básicamente dice
SELECCIONA
id
apellido ", " nombre
activo
fecha edicion
DE
tbl_usuario
Por default ordenará de acuerdo al apellido, su nuestra variable de ordenamiento tiene algún valor, entonces utilizará esta variable de ordenamiento.
En negritas lo único que es un poco distinto, simplemente concatenamos dos campos para unirlos en uno solo en nuestro resultset, a ese campo le llamaremos usuario_nombre_completo.
Código:
qry = "SELECT a.usuario_id, a.usuario_apellido + ', ' + a.usuario_nombre as usuario_nombre_completo, " & _
"a.usuario_activo, " & _
"a.usuario_fecha_edicion FROM tbl_usuario a "
if len(strOrdernar) > 0 then
qry = qry & " ORDER BY " & strOrdenar
else
qry = qry & " ORDER BY a.usuario_apellido "
end if
Todo el truco de la paginación, está en las líneas siguientes, por favor nota que estamos trabajando con
el método GetRows del objeto ADO, el cuál crea un arreglo bidimensional, personalmente me gusta utilizarlo porque elimina el alto consumo de recursos del recordset, y nos da una estructura de datos desconectados, es altamente eficiente, aunque un poco más abstracto que el recordset.
Código:
'Obtenermos la cantidad total de registros devueltos por el recordset
m_registros_totales = rs.RecordCount
'Si la cantidad de registros es mayor al maximo tamaño de la página
if rs.RecordCount > intTamanoPagina then
'Paginamos nuestro recordset
rs.PageSize = intTamanoPagina
rs.AbsolutePage = intPagina
m_paginas_totales = rs.PageCount
else
'solo una pagina
m_paginas_totales = 1
end if
'Si efectivamente hubo un recordset, entonces utilizamos el metodo
'getRows valiendonos de sus argumentos para paginar los resultados.
if not rs.EOF then
ds = rs.GetRows(intTamanoPagina, 0)
else
'no hay registros
ds = null
end if
Cerramos y destruimos todo, devolvemos nuestro set de datos, como verás, la idea es que nuestro método sea tan especializado como sea posible, es decir, a el no le interesa si hay datos o no, ni se encarga de ninguna parte lógica, mas que de devolver páginas de datos.
Código:
ObjConn.Close()
Set rs = Nothing
Set ObjConn = Nothing
Set param = Nothing
Set cmd = Nothing
Listar = ds
Hasta aquí con nuestro método listar, en la siguiente sesión nos enfocaremos a la interfaz de usuarios ya que tenemos los métodos necesarios al menos para desplegar datos.
Saludos