Ver Mensaje Individual
  #34 (permalink)  
Antiguo 24/10/2007, 08:10
Avatar de u_goldman
u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 1 mes
Puntos: 98
Re: Un módulo de usuarios

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
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway

Última edición por u_goldman; 24/10/2007 a las 08:16