You are on page 1of 6

NUESTRO FORMULARIO CHIVATO1

Este ejemplo se encuentra, a la vez, en la sección seguridad


y en la sección formularios de la web. ¿Por qué?

Se encuentra en la sección seguridad porque si bien ya


existe un ejemplo para crear un formulario con contraseña
(ver aquí), que utiliza el método de creación de un
Recordset, para este ejemplo vamos a utilizar otro método
para comprobar que el usuario y la contraseña introducidos
son correctos. Así tendréis más variedad de opciones para
adaptar a vuestras aplicaciones.
Además, tenemos un ejemplo, que es InputBox con contraseña. Lo que vamos a explicar aquí
podría considerarse una “variación sobre el tema”, sin necesidad de requerir contraseña cada
vez.

Por otra parte, se encuentra en la sección formularios porque vamos a utilizar un formulario
como chivato para poder limitar las acciones del usuario. Lo que vamos a explicar aquí se
puede hacer, evidentemente, de otras maneras, pero a mí, personalmente, me gusta mucho
tener ese “topo” espía en mi BD que me lo “canta” todo .

Si tuviera que hacer una introducción al ejemplo utilizando mi fantástica creatividad literaria
(je, je…) diría lo siguiente: nuestra BD tiene formularios que los usuarios pueden emplear sin
problemas, pero hay algunos formularios cuyo acceso requiere que el usuario sea fulanito o
menganito. Vamos a ver cómo dejar acceder a esos formularios “restringidos” en función de
quién sea el usuario que esté utilizando la BD.
Los puntos 1 al 8 son comunes a los explicados en el ejemplo abrir formulario con contraseña,
antes citado. Los vuelvo a repetir para aquellos que no hayan seguido dicho ejemplo. A partir
del punto 9 sí que cambia un poco la cosa.

Vamos allá:
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.
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 un formulario en blanco. Lo guardamos como FPass. Le añadimos los siguientes
elementos, a la vez que los configuramos como sigue:

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

1
Visítame en http://bit.ly/NckAccess
· 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

5.- 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

· Pestaña Otras:

2
Visítame en http://bit.ly/NckAccess
o Emergente: SÍ
o Modal: SÍ

6.- 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
7.- Cuadro combinado cboUser->Evento “Después de actualizar”, le asignamos el siguiente
código:
Private Sub cboUser_AfterUpdate()
Me.txtPass.SetFocus
End Sub

8.- 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
9.- Vamos a dejar por ahora el formulario FPass. Vamos a crear un formulario en blanco y lo
guardamos con el nombre de FAutorizado1 y creamos otro llamado FAutorizado2.
10. Abrimos la tabla TPass y creamos dos usuarios. En la BD de ejemplo ya tenemos uno, que
es neckkito (pass: neckkito), y he añadido otro que es Usuario2, con pass 123. neckkito tendrá
acceso sólo a FAutorizado1; Usuario2 tendrá sólo acceso a FAutorizado2.

11.- Creamos otro formulario en blanco y lo llamaremos FMenu. Insertamos dos botones de
comando. Uno, de nombre cmdAbreFA1, y otro, de nombre cmdAbreFA2.

12.- Al botón cmdAbreFA1 le asignamos el siguiente código al evento “Al hacer click”:
---

Private Sub cmdAbreFA1_Click()


Dim vUser As Variant
vUser = Forms!FChivato.txtUser.Value

If vUser = "neckkito" Then


DoCmd.OpenForm "FAutorizado1"
Else
MsgBox "No está autorizado para acceder a este formulario", vbInformation, "AVISO"
End If
End Sub

3
Visítame en http://bit.ly/NckAccess
---
Lo que hace este código es simplemente mirar qué valor
tiene asignado el formulario FChivato (hablaremos de él
más adelante) y compararlo con el nombre de la persona
autorizada. Si coinciden deja paso, si no lanza un mensaje
de advertencia.

13.- De igual manera, al botón cmdAbreFA2 le asignamos el


siguiente código:

---
Private Sub cmdAbreFA2_Click()
Dim vUser As Variant
vUser = Forms!FChivato.txtUser.Value

If vUser = "usuario2" Then


DoCmd.OpenForm "FAutorizado2"
Else
MsgBox "No está autorizado para acceder a este formulario", vbInformation, "AVISO"
End If
End Sub
---

14.- Creamos un nuevo formulario en blanco que guardamos con el nombre de FChivato. En él
insertamos un cuadro de texto y le ponemos de nombre txtUser (Propiedades->Pestaña Otras-
>Nombre). Este formulario será nuestro “topo” que nos dará la información, de manera
totalmente oculta, sobre qué usuario es el que manipula la BD. Desde el panel de exploración
sacamos sus propiedades de vista y lo marcamos como oculto.
15.- Ahora sí volvemos a nuestro formulario FPass. Al botón de comando ACEPTAR le
asignamos el siguiente código al evento “Al hacer click”:
---

Private Sub cmdAceptar_Click()


Dim vUser As Variant
Dim vPass, vTPass As Variant
vUser = Me.cboUser.Value
vPass = Me.txtPass.Value

If IsNull(vUser) Then
MsgBox "No ha seleccionado ningún usuario", vbInformation, "AVISO"
Me.cboUser.SetFocus
Exit Sub
End If

If IsNull(vPass) Then
MsgBox "No ha introducido ninguna contraseña", vbInformation, "AVISO"
Me.txtPass.SetFocus
Exit Sub
End If

4
Visítame en http://bit.ly/NckAccess
vTPass = DLookup("[Pass]", "TPass", "[NomUser] = '" & vUser & "'")

If vTPass = vPass Then


DoCmd.OpenForm "FChivato", , , , , acHidden
Forms!FChivato.txtUser.Value = vUser
DoCmd.OpenForm "FMenu"
DoCmd.Close acForm, Me.Name
Else
MsgBox "La contraseña introducida no es correcta",
vbInformation, "AVISO"
Me.txtPass.Value = Null
Me.txtPass.SetFocus
End If
End Sub
---

Vamos a ver qué hace el código:


En primer lugar definimos las variables (líneas de las DIM) y les asignamos los valores
correspondientes a lo que el usuario ha escrito en “usuario” y “contraseña”.
Los dos bloques IF…END IF siguientes comprueban que ni el combo ni el cuadro de texto
hayan quedado en blanco, lanzando un mensaje de advertencia si así ocurre.
vTPass = DLookup("[Pass]", "TPass", "[NomUser] = '" & vUser & "'")

Para buscar si el nombre de usuario es coincidente con su contraseña hemos utilizado esta vez
el método DLookUp, asignando el valor devuelto por el mismo a la variable vTPass.
Lo que viene a decir la anterior línea de código, en abstracto, es lo siguiente:

Busca y devuelve el valor del campo [Pass] de la tabla “TPass” cuando el campo [NomUser]
coincida con el valor de la variable vUser, que es el valor seleccionado en el combo con el
nombre de usuario. Ese valor devuelto será guardado en la variable vTPass.
If vTPass = vPass Then
DoCmd.OpenForm "FChivato", , , , , acHidden
Forms!FChivato.txtUser.Value = vUser
DoCmd.OpenForm "FMenu"
DoCmd.Close acForm, Me.Name
Else
MsgBox "La contraseña introducida no es correcta", vbInformation, "AVISO"

Lo que dice este bloque de código, también en abstracto, es lo siguiente:

Si vTPass coincide con vPass entonces


Abre el formulario FChivato, pero en modo oculto

En el cuadro de texto txtUser de FChivato guardas el nombre del usuario que accede a
la BD

Abre el formulario FMenu

5
Visítame en http://bit.ly/NckAccess
Cierra el formulario FPass
Si no coinciden las constraseñas entonces

Lanza un mensaje de aviso


---

Ahora, en todo momento, FChivato estará “espiando”, y


nadie lo sabrá (salvo nosotros, claro), y además txtUser nos
“chivará” el nombre de usuario cuando lo necesitemos. En
este ejemplo nos sirve para comprobar si se tiene acceso a
los formularios FAutorizado1 y FAutorizado2.
Evidentemente lo anterior sería extrapolable a cualquier acción que se realizara en nuestra
aplicación, únicamente comprobando, al principio de cada código, quién es el usuario activo.

Y eso es todo. Espero que lo anterior os sea útil para vuestras BD’s.
¡Suerte!

6
Visítame en http://bit.ly/NckAccess

You might also like