You are on page 1of 5

CONTRASEÑA CON CONTROL DE ACCESO1

INTRODUCCIÓN
Ante una “amable petición” me he decidido a realizar este
ejemplo. La pregunta era, en esencia: ¿se puede acceder a
la BD a través de un formulario con contraseña y registrar
quién entra y cuándo lo hace?

La respuesta es sí (porque si no no estaría desarrollando


este ejemplo, claro... je, je...).

Me voy a basar en el ejemplo que podéis encontrar en la web, llamado “Contraseña”. De


hecho, para evitar “parches”, este ejemplo será un copy-paste de dicho ejemplo, añadiendo, en
los lugares correspondientes, las acciones necesarias para conseguir ese registro de “entradas
de usuarios” para que “el jefe” pueda saber “quién trabaja y quién no”... ji, ji...

Os recuerdo que en la BD de ejemplo usuario y password son: neckkito

Sin más dilaciones vamos al ejemplo.

PASOS A SEGUIR
Los pasos que debemos seguir serán los siguientes:

1.- Creamos una tabla, a la que llamaremos TPass. Esta tabla contendrá dos campos: NomUser
y Pass. El campo NomUser lo definimos como texto y le establecemos la longitud en 10
caracteres (optativo, pero es mejor delimitar la longitud para no tener un campo inútil de 255
caracteres). El campo Pass lo establecemos también como texto, de longitud 10 caracteres (la
misma explicación que antes). Le asignamos una máscara de entrada tipo “contraseña”.
Introducimos al menos un usuario y una contraseña.

Nos debería quedar una cosa así:

2.- Hacemos click con el botón derecho del ratón sobre la tabla que acabamos de crear, nos
vamos a “propiedades de la tabla” y en la ventana que nos sale le marcamos el check “Oculto”.
La tabla ahora estará oculta a la vista de “fisgones”.

3.- Para ver la tabla hacemos click con el botón derecho del ratón sobre cualquier espacio en
blanco del panel de exploración y nos vamos a “Opciones de exploración”. Le marcamos el
check “Mostrar objetos ocultos”. Ahora nos aparecerá nuestra tabla con el nombre atenuado.

No olvidéis desmarcar esta opción para volver a hacer “desaparecer” la tabla.

4.- Creamos una tabla, a la que llamaremos TControl, con tres campos:
– [User] → Texto

1 La BD de ejemplo os la podéis bajar aquí.

1
Visítame en http://siliconproject.com.ar/neckkito/
– [FAcceso] → Fecha/Hora
– [HAcceso] → Fecha/Hora

Nos debería quedar así:

También podemos convertirla en una tabla oculta, según os comentaba en los puntos
anteriores.

5.- Creamos un formulario en blanco. Lo guardamos como FPass. Le añadimos los siguientes
elementos, a la vez que los configuramos como sigue:
 Cuadro combinado
o Le decimos al asistente que busque los valores en una tabla
o Seleccionamos la tabla TPass
o Añadimos sólo el campo NomUser
o Valor a mostrar: Usuario:
o Sacamos las propiedades del cuadro combinado y le establecemos lo siguiente:
 Pestaña Datos:
 Limitar a la lista: SÍ
 Permitir ediciones de lista: NO
 Pestaña Otras:
 Nombre: le escribimos cboUser
 Cuadro de texto
o En su etiqueta escribimos Contraseña:
o Sacamos sus propiedades y le establecemos lo siguiente:
 Pestaña Datos:
 Máscara de entrada: contraseña
 Pestaña Otras:
 Nombre: le escribimos txtPass
 Botón de comando: será el que nos permitirá aceptar los datos. Lo creamos en el
formulario (cancelamos el asistente si nos sale), sacamos sus propiedades y en la
pestaña Otros->Nombre lo llamamos cmdAceptar
 Botón de comando: será el que nos permitirá cancelar. Lo creamos en el formulario
(cancelamos el asistente si nos sale), sacamos sus propiedades y en la pestaña Otros-
>Nombre lo llamamos cmdCancelar

El diseño del formulario que he hecho yo me ha quedado


así:

6.- Vamos a configurar el formulario para que tenga unas


determinadas características. Para ello sacamos las
propiedades del formulario y:
 Pestaña Formato:
o Título: le ponemos de título PASSWORD
o Centrado automático: SÍ
o Estilo de los bordes: Diálogo
o Selectores de registro: NO
o Botones de desplazamiento: NO
o Barras de desplazamiento: Ninguna
o Cuadro de control: NO

2
Visítame en http://siliconproject.com.ar/neckkito/
 Pestaña Otras:
o Emergente: SÍ
o Modal: SÍ

7.- Vamos a aplicar código para que la cosa funcione. El


proceso es idéntico para todos los controles. Sacamos sus
propiedades, vamos a la pestaña Eventos, seleccionamos el
evento al que queremos asignar código, nos situamos en el
espacio en blanco que hay a su derecha. Nos saldrá un
pequeño botón con puntos suspensivos. Hacemos click
sobre él y, en la ventana que nos aparece, le decimos que
queremos generar código. Nos aparecerá el editor de VB.

Todo el código debe ir entre las dos líneas que aparecen por defecto: Private Sub… y End Sub

8.- Cuadro combinado cboUser->Evento “Después de actualizar”, le asignamos el siguiente


código:


Private Sub cboUser_AfterUpdate()
Me.txtPass.SetFocus
End Sub

9.- Botón de comando cmdCancelar->Evento “Al hacer click”, le asignamos el siguiente código:


Private Sub cmdCancelar_Click()
Dim resp As Integer
resp = MsgBox("¿Seguro que desea cancelar?", _
vbQuestion + vbYesNo, "CONFIRMAR")
If resp = vbYes Then
DoCmd.Quit
End If
End Sub

10.- Antes de programar el botón cmdAceptar vamos a crear un formulario en blanco. No


hacemos nada con él. Simplemente lo guardamos como FMenu.

11.- Al botón cmdAceptar le asignamos, al evento “Al hacer click”, el siguiente código 2:


Private Sub cmdAceptar_Click()
'Declaramos las variables
Dim vUser As String
Dim vPass As String
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim rstControl As DAO.Recordset
'Definimos dbs
Set dbs = CurrentDb
'Cogemos los valores introducidos por el usuario
vUser = Nz(Me.cboUser.Value, "")

2Para que el código funcione debemos comprobar que tenemos la biblioteca DAO registrada. Para ello abrimos el editor de VB (Alt+F11)
y nos vamos al menú Herramientas->Referencias… Buscamos la referencia “Microsoft DAO 3.6 Object Library” y la agregamos.

3
Visítame en http://siliconproject.com.ar/neckkito/
vPass = Nz(Me.txtPass.Value, "")
'Si el nombre de usuario está vacío avisamos y salimos
If vUser = "" Then
MsgBox "No ha seleccionado ningún usuario",
vbInformation, "AVISO"
Me.cboUser.SetFocus
Exit Sub
End If
'Si no se ha introducido contraseña alguna avisamos y
salimos
If vPass = "" Then
MsgBox "No ha introducido ninguna contraseña",
vbInformation, "AVISO"
Me.txtPass.SetFocus
Exit Sub
End If
'Definimos el recordset rst
Set rst = dbs.OpenRecordset("TPass", dbOpenSnapshot)
'Si no hubiera datos en la tabla TPass avisamos y saltamos a Salida
If rst.RecordCount = 0 Then
MsgBox "No existen usuarios", vbInformation, "AVISO"
GoTo Salida
End If
'Nos movemos al primer registro
rst.MoveFirst
'Iniciamos el proceso de comprobación usuario-contraseña
Do Until rst.EOF
Dim tUser, tPass As String
'Cogemos el nombre de usuario de la tabla
tUser = rst.Fields(0).Value
'Cogemos la constraseña correspondiente a ese usuario
tPass = rst.Fields(1).Value
'Si el usuario de la tabla coincide con el introducido por el usuario...
If tUser = vUser Then
'Si también coinciden las contraseñas...
If tPass = vPass Then
'Definimos el recorset rstControl
Set rstControl = dbs.OpenRecordset("TControl", dbOpenTable)
'Añadimos la información en la tabla TControl
With rstControl
.AddNew
.Fields(0).Value = vUser
.Fields(1).Value = Date
.Fields(2).Value = Format(Now, "hh:mm:ss")
.Update
End With
'Cerramos el formulario actual
DoCmd.Close acForm, Me.Name
'Abrimos el formulario FMenu
DoCmd.OpenForm "FMenu"
'Cerramos conexiones y liberamos memoria
rst.Close
rstControl.Close
dbs.Close
Set rst = Nothing
Set rstControl = Nothing

4
Visítame en http://siliconproject.com.ar/neckkito/
Set dbs = Nothing
'Salimos del proceso
Exit Sub
Else
'Si no coinciden las constraseñas avisamos...
MsgBox "La contraseña introducida no es correcta", _
vbInformation, "INCORRECTO"
'Situamos el enfoque en txtPass
Me.txtPass.SetFocus
'Borramos el valor de txtPass
Me.txtPass.Value = Null
'Saltamos a Salida
GoTo Salida
End If
End If
'Nos movemos al siguiente registro y repetimos el proceso.
rst.MoveNext
Loop
'Cerramos conexiones y liberamos memoria
Salida:
rst.Close
dbs.Close
Set rst = Nothing
Set dbs = Nothing
End Sub

Y eso es todo. Ahora sólo debemos cambiar, en la línea que pone DoCmd.OpenForm "FMenu",
FMenu por el nombre del formulario que queremos que se abra.

Pues lo dicho... ¡a controlar! ;)

¡Suerte!

5
Visítame en http://siliconproject.com.ar/neckkito/

You might also like