jueves, 15 de noviembre de 2012

Crear / Diseñar un formulario de acceso (Login) a nuestras aplicaciones - Visual FoxPro.

Saludos. En reiteradas ocasiones me han consultado como hacer un form de acceso (login) para nuestras aplicaciones. La solucion es sencilla. :)

 Todo parte de seguir una logica coherente: tenemos un formulario principal de nuestra aplicacion que es desde donde ejecutamos todas las transacciones. Para poder acceder a el, debemos "logearnos" o ingresar al sistema. Para esto, creamos un formulario adicional en donde podamos ingresar nuestro usuario y contraseña correspondiente. Asi mismo, debe existir, en la base de datos, una tabla en donde se lleve el control de los usuarios, contraseñas y accesos al sistema. Con accesos me refiero a los privilegios de entrada, visualizacion, adicion, modificacion y elimacion de registros. Este tema en especifico, lo tomaremos en la siguiente publicacion.

Veamos pues como se procede:

1. Diseñemos la tabla: los nombres de usuario y contraseña se almacenaran aqui. Creamos una tabla llamada "usuario" con los campos: codigousuario (numerico, width = 5, index = regular) , nom_usuar (caracter, width = 20, index = regular), contraseña (caracter, width = 15). Asi:


**Carguemos en la tabla algunos datos... para que podamos probar la funcionalidad posteriormente. Ingresemos el codigo: 1020 - usuario: Ravenn -  Contraseña: blogspot129

**Posterior a la creacion del login, se debe proceder a crear un form para la gestion (altas, bajas y modificaciones de los usuarios. Este punto, queda totalemente a criterio de los usuarios :)

2. Diseñemos el FORM: procedemos a crear un formulario para poder acceder con nuestro usuario y contraseña. Para esto, vamos al diseñador de forms y creamos un formulario llamado "Login" con los controles basicos necesarios, tales como: 2 cuadros de texto (TxtNom_Usuar, TxtContraseña), dos botones de comando (Command1, Command2). Uno para ingresar y otro para salir. Asi:


3. Escribimos el codigo:para esto, procedemos a crear un nuevo metodo en el formulario llamado "ingresar". Para esto, vamos al menu de foxpro, en el diseñador de forms y en el menu FORM, desplegamos y escogemos la opcion "NewMethod". Luego, vamos a las propiedades del form, en la pestaña Method y buscamos el metodo que acabamos de crear. Damos Db click y escribimos el siguiente codigo:

**--Ingreso**--

SELECT  usuario

SET ORDER to nom_usuar

SEEK  ALLTRIM(thisform.txtNom_usuar.value)        &&Asigna valor a variables&&

**--Devolvemos resultado
IF FOUND () AND ALLTRIM (THISFORM.txtContraseña.value) = ALLTRIM (usuario.Contraseña)
   
    **Si se encuentra el usuario y contraseña registrados.
   **Llamamos al form principal
   **Cerramos el form login

    DO FORM "principal.scx"
    THISFORM.Release
   
    **Si no encontramos usuario o contraseña
    ELSE
   
        MESSAGEBOX("El usuario y contraseña no son validos. Asegurese de digitar un usuario registrado.", 16, ;
       Error - Usuario y contraseña invalidos")
   
  **Cancelamos accion
   CANCEL

ENDIF

**--Fin--**


Ahora, vamos al evento click del Command 1 y llamamos al metodo:

THISFORM.ingresar

En el command2, escribimos (Salir):

THISFORM.Release

4. Agregamos la tabla: hacemos click derecho sobre el form y escogemos la opcion "data enviroment", ah buscamos la tabla usuario y la agregamos al entorno de datos de nuestro form.

 5. Desactivamos la tecla BloqMayus en contraseña: para evitar errores de escritura entre mayusculas y minusculas, podemos desactivar la tecla bloq mayus (para escribir solo minisculas) cuando el txtContraseña reciba el enfoque. Para esto, creamos otro metodo adicional al form llamado "desactivarBqMay" y en el, escribimos eset codigo:

**--Comprobamos el estado de la techa BloqMayus
**--Si esta encendida, procedemos a apagarla
**--CAPSLOCK() devuelve el estado de la tecla ON/OFF


IF CAPSLOCK() = .T.

        CAPSLOCK(.F.)

ENDIF
**--Fin**--

Ahora, en el evento GotFocus del TxtContraseña, llamamos al metodo:

**--
THISFORM.desactivarBqMay
**--

6. Configurar propiedades y funciones del Form: esto con el objetivo de mejorar el rendimiento del la aplicacion y evitar errores futuros.

6.1 **En las propiedades del form, en la pestaña DATA, escogemos la propiedad BufferMode y la establecemos en 2 - Optimistic. Asi mismo, la propiedad DATESESSION y establecemos 2 - private datesession (necesario para - SET EXCLUSIVE OFF - abrir archivos en modo compartido en red).

6.2 **En el evento INIT() del form, escribimos el siguiente conjunto de instrucciones.

**--Configuracion inicial
**----------------------
**----------------------

**--Apagamos conversacion de VFP
SET TALK OFF

**--Desactivamos registros marcados para eliminacion
SET DELETED ON

**--Por si usamos fecha para una vitacora de ingresos
**--El formato es dia/mes/año
SET DATE BRITISH

**--Necesario para modo compartido
SET MULTILOCKS ON


**--Abrir archivos en modo compartido
SET EXCLUSIVE OFF

**--Centrar el form
THISFORM.AutoCenter = .T.



**--Importante:
**--Configuramos modo (de bloqueo) compartido (Buffer) de tabla
**--Evitamos conflictos en red
CURSORSETPROP("Buffering", 5, "usuario")





Y listo. Guardemos y ejecutemos. Escribamos el usuario y contraseña.

Esta es una forma segura y sencilla de logearnos en nuestro sistema. No es la unica ni la mejor. Solo mi opinion! Cualquier duda, a la orden! Comenten!


Saludos! Desde Managua, Nicaragua!
Ravenn :D :D :D 


14 comentarios:

  1. Hola todo esto me parese muy interesante lo pondre en marcha y si me marca herror o algo asi te aviso.

    ResponderEliminar
  2. Disculpa me prodrias explicar esta parte porfa
    **Posterior a la creacion del login, se debe proceder a crear un form para la gestion (altas, bajas y modificaciones de los usuarios. Este punto, queda totalemente a criterio de los usuarios :)

    ResponderEliminar
  3. Hola. gracias por consultar. Eso se refiere a que, tu, como administrador, puedes y debes crear el form de altas y bajas de las cuentas de los usuarios. Si se crea un nuevo usuario... debes registrarle una cuenta para que pueda acceder... con un nombre de usuario y una contrasena valida. Ves... yo no aborde esa parte...! Solo aborde como crear el acceso... pero la administracion de usuarios y contrasenas... ya puede ser a criterio de ustedes, los desarrolladores! :) Cualquier cosa... avisame! SALUDOS! DESDE MANAGUA, NICARAGUA!

    ResponderEliminar
  4. maldito no sirveeesss

    ResponderEliminar
    Respuestas
    1. Menos servis vos tremendo hijo de puta que no podes hacer una pajada como ésta de una, cuando hasta un estudiante de 1 lo ha conseguido sin estar de marica! -.-""

      Eliminar
  5. hermano.. hise todos los poredimientos paso a paso.. y no me funcona... no tenes un medio para que entablemos una conversacion y asi podrias ayudarme con esta ventana de login en fox pro...

    ResponderEliminar
    Respuestas
    1. Hola! Un placer saludarte. :) Si claro... si queres, escribime a:

      sagaxton@hotmail.com


      y ahi me planteas bien tu duda y te echo una mano, recordame que escribis por lo del login si! :) ... si podes adjuntar una imagen del error y la linea (en el debugger) del error, mucho mejor...! Si no, pues con una explicacion y vemos!! Espero tus comentarios!

      A la orden, Ravenn :D :D :D
      Desde Managua, Nicaragua!

      Eliminar
  6. hola disculpa hay alguna posibilidad de q crees un pequeño video tutorial al respecto y lo subas en youtube ?
    estoy espesando con visual foxpro y seria mas fácil para mi y para lo que leen este articulo.
    muchas gracias luis miler . argentina

    ResponderEliminar
    Respuestas
    1. Hola Luis Miler. Es un placer saludarte y miles de gracias por visitar el blog. Respecto a tu propuesta... me parece muy bien. He tenido la intencion de abrir un canal de youtube para conectarlo aca al blog y poder dar un mejor seguimiento a los temas tratados. Me complica un poco por razones del trabajo... pero si es buena la idea. En estos dias intentare hacer el videotutorial y abrir el canal. De lograrlo, te avisare.

      De todas formas... podes hacer las consultas aca mismo... o entrar al foro de todoexpertos.com y ahi buscar la sub categoria "visual foxpro" en la categoria de tecnologia. En la subcategoria... buscas al primer experto que aparece disponible llamado "ravenn" y ahi podes hacer todas las consultas respecto a visual foxpro de forma gratuita... sin ningun costo y con la mejor voluntad! :) Asi mismo.. podes leer consultas anteriores. Aca te dejo el link del perfil ... solo es cosa que te registres como usuario totalmente gratis.

      http://www.todoexpertos.com/categorias/tecnologia-e-internet/programacion/visual-fox-pro/expertos/ravenn

      Bien.. un saludo! Muchas gracias por tu visita y posteo!

      Desde Managua, Nicaragua!
      Ravenn :D :D :D

      Eliminar
    2. gracias viejo por tu respuesta. cuando veo tu código hay un parte que dice DO FORM "principal.scx"
      en ningún momento mencionas crear un formulario llamado principal.scx
      venia todo bien hasta esa parte.

      pero como vas a crear un video tutorial. nos vas a ayudar mucho a mi a otros que estamos leyendo tu blog.

      espero tu video te dejo el mail
      yode51 @ciudad.com.ar todo junto
      saludo
      Luis Miler

      Eliminar
    3. Hola Luis. A como puedes ver... hay unos comentarios justo antes

      **Si se encuentra el usuario y contraseña registrados.
      **Llamamos al form principal
      **Cerramos el form login

      de la linea que mencionas. Ese form que se llama principal es en realidad el formulario base o principal de tu aplicacion. Si vos te "logueas" en el form de usuario y contraseña... que pasa si algun dato falla? No podes accesar al sistema. Pero que pasa si el usuario y passw son correctos? Debes ir a la pantalla principal de tu aplicacion no? Entonces ese "principal" es aquel formulario que vos querras presentar al iniciar la sesion. Yo, por ejemplificar, le puse asi.. pero vos podes poner la pantalla que queres que se cargue al "loguearte" correctamente!

      Bien... cualquier cosa, me avisas!
      Un abrazo! Hasta Argentina!
      Desde Managua, capital de Nicaragua! :)

      Eliminar
  7. Hola Ravenn, espero estés bien, disculpa si revivo un tema tan viejo pero tengo una duda. Ya se como crear el login, contraseña y usuario. ahora lo que no se es como hacer para que alguien nuevo pueda guardar sus datos (nombre, contraseña) y si desea, pueda modificarlos.
    Gracias de antemano

    ResponderEliminar
    Respuestas
    1. Hola Brandon! Un placer! :) Gracias por visitar el blog! Pues bien... la duda que planteas tiene que ver ya con un perfil de administrador de tu sistema. En todo sistema, por lo general, hay 1 o 2 administradores GENERALES... es decir... aquellos usuarios que tienen acceso full a todo el sistema y que tienen potestades o tareas unicas... una de ellas es crear nuevos usuarios. A tu sistema, vos debes crearle un form en donde podas registrar nuevos usuarios... algo como ALTA DE USUARIOS... y ahi mismo asignar los pass y los accesos que tendran segun el perfil de usuario. Por ejemplo: el usuario MAESTRO es el unico que tiene acceso al form de crear usuarios... es el unico que tiene ese privilegio. El usuario MAESTRO se loguea y ya tiene acceso full a todo. Registra un usuario... le asigna un pass y ahi mismo le asigna las instancias o forms, reportes etc... a los que el nuevo usuario tiene acceso.. ese form lo tenes que crear! Sencillito... un form donde hagas in INSERT del usuario, pass y privilegios o accesos. Eso si ya depende de como programes o de lo que tu cliente te pida. Yo en lo personal... tengo una tabla especial donde guardo los nombres de las instancias (alta de inventario, editar inventario... alta de clientes, editar clientes... eliminar clientes, ver reporte de clientes, ver proveedores... etc etc etc). La tabla tiene ademas un campo de IDUSUARIO y a cada instancia le asigno 0 si no tiene acceso y un 1 si se tiene acceso. Por ejemplo: el usuario 001 (juan perez) tiene acceso a inventarios (1), proveedores (1), no tiene acceso a clientes (0) y asi...! Luego, cuando se llama a cada instancia, por ejemplo un boton que sea VER PROVEEDORES, le programo una rutina antes de llamar al DO FORM proveedores.scx en donde se lee o se consulta si el usuario activo (almacenado en una variable publica) tiene acceso = 1 a esa instancia. Si la consulta (select) regresa 1... entonces se permite accesar. Si regresa 0 no permite. Esto ya es para los privilegios. Para los usuarios... basta con una tabla sencilla de usuario y pass... y listo! :)

      Un abrazo! Desde Managua, Nicaragua! Avisa cualquier cosa!
      sagaxton@hotmail.com

      Eliminar