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

Hola a tod@s, perdonen si en esta ocasion escribo sin acentos pero es que aun no he podido reestablecer mi windows y sigo trabajando con la version "buteable" de Ubuntu, pero bueno...mientras tanto ya tenemos la forma que autentifica al usuario, pero en realidad nuestra clase usuario esta incompleta pues, nuestros usuarios no tienen nombre, apellido, ni se sabe nada de ellos, asi que retomamos nuestra clase y como mencionamos anteriormente, con frecuencia aunque no necesariamente es una regla, las propiedades de nuestras clases, representan campos en nuestra base de datos, agreguemos primero los campos a nuestra tabla de usuarios, y acto seguido las propiedades a nuestra clase...

tbl_usuario
--------------------
usuario_id | autoincremental, llave primaria
usuario_nombre | texto/varchar(50)
usuario_apellido | texto/varchar(50)

usuario_uname | texto/varchar(50)
usuario_pwd | texto/varchar(50)
usuario_activo | bit/boolean
usuario_fecha_edicion | datetime/fecha


En negritas se encuentran los nuevos campos y como comentamos, cada uno de estos campos representa una propiedad nueva en nuestra clase usuario, y como ya mencionamos, cada propiedad para efectos de nuestro ejercicio tendra 2 miembros, uno publico y otro privado y el publico, tendra dos metodos, uno que asigna valor, el otro que lo devuelve, al final de teclear todo esto, si no puedo tener exito como desarrollador, por lo menos se que de capturista si encuentro trabajo :

Nota las convenciones que estamos usando, un miembro privado lo identificaremos pues comienza con "m_" (miembro), en tanto que el publico es el mismo nombre del privado sin el "m_", y en el metodo que hacemos la asignacion, recibimos un argumento p_data que es el dato publico, ahora si, a trabajar:

Código:
private m_nombre
private m_apellido
private m_activo
private m_fecha_edicion

public property get nombre()
	nombre = m_nombre
end property
public property let nombre(p_data)
	m_nombre = p_data
end property

public property get apellido()
	apellido = m_apellido
end property
public property let apellido(p_data)
	m_apellido = p_data
end property

public property get activo()
	activo = m_activo
end property
public property let activo(p_data)
	m_activo = p_data
end property

public property get fecha_edicion()
	fecha_edicion = m_fecha_edicion
end property
public property let fecha_edicion(p_data)
	m_fecha_edicion = p_data
end property
El problema de agregar propiedades, es que no nos escapamos de tener que agregarlas en cada metodo que las llame explicitamente:

Código:
	Private sub Class_Initialize
		m_id = -1
		m_uname = ""
		m_pwd = ""
            m_nombre = ""
                m_apellido = ""
                m_activo = false
                m_fecha_edicion = Cdate("1/1/1800")
	End sub
Ok, hasta aqui vamos bien, hemos terminado de agregar las propiedades que en las partes que deben ser agregadas, ahora, si recuerdas nuestro formulario, despues de ingresar exitosamente, se establece una variable de sesion y se le asigna el valor del id del usuario, esta variable de sesion combinada con un metodo ObtenerDatos() puede ser de muchisima utilidad a lo largo de nuestra aplicacion:

Código:
Public function ObtenerDatos()
    Dim ObjConn
    Dim rs
    Dim cmd
    Dim param
    Dim accionEsExitosa
    Dim qry

   Set ObjConn = Server.CreateObject("ADODB.Connection")
   Set rs = Server.CreateObject("ADODB.Recordset")
   Set cmd = Server.CreateObject("ADODB.Command")
   accionEsExitosa = false

   qry = "SELECT a.* FROM tbl_usuario a WHERE a.usuario_id = ?"

   Set param = cmd.CreateParameter("id", adInteger, adParamInput, 4, m_id)
   cmd.Parameters.Append(param)

   ObjConn.Open strConnect
   cmd.ActiveConnection = ObjConn
   cmd.CommandType = adCmdText
   cmd.CommandText = qry

   rs.Open cmd

   if not rs.EOF then
     m_id = rs("usuario_id")
     m_nombre = rs("usuario_nombre")
     m_apellido = rs("usuario_apellido")
     m_uname = rs("usuario_uname")
     m_pwd = rs("usuario_pwd")
     m_activo = rs("usuario_activo")
     m_fecha_edicion = rs("usuario_fecha_edicion")
     accionEsExitosa = true
     rs.Close()
  else
    accionEsExitosa = false
  end if
   
   ObjConn.Close()
   Set rs = Nothing
   Set ObjConn = Nothing
   Set param = Nothing
   Set cmd = Nothing
   
   ObtenerDatos = accionEsExitosa
end function
Y su implementacion, suponiendo que ya hemos autentificado a nuestro usuario:

Código:
Set ObjUsuario = new usuario
ObjUsuario.id = Session("usuarioID")
if ObjUsuario.ObtenerDatos() then
   Response.Write("Nombre: " & ObjUsuario.nombre & " " & ObjUsuario.apellido)
   'todos los demas datos que querramos imprimir
else
   Response.Write("No se encontro el usuario")
end if
Set ObjUsuario = Nothing
Mas adelante comenzaremos a darle sentido a todo esto, por el momento ya tenemos dos metodos en nuestra clase, y uno de ellos recupera todos los datos del usuario.

* Nota: Ya se que alguno de ustedes va a aparecer para gritarme "estas usando un select * en la consulta que devuelve las propiedades del usuario", se que el hacer consultas de este tipo tiene cierto "overhead", pero tampoco es un pecado mortal para este tipo de consultas que devuelven 5 o 6 campos, hay veces que es conveniente, y este es uno de los casos pues si llegamos a editar la tabla agregar/quitar campos, no tendremos tambien que modificar el query, es un pequenio pecado, pero creo que rezando dos oraciones, seremos exhonerados


Ahora si, 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; 04/10/2007 a las 22:13