activar o desactivar boton de comando despues de digitar ususario y contraseña
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 contraseña con InputBox. 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 o ras 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 utilizan
o mi fantástica creatividad
literaria (je, je…) diría lo siguiente: nuestra
D tiene fo mularios que los usuarios
pueden emplear sin problemas, pero hay algunos formularios cuyo acceso requiere
que el usuario sea fulanito o menganito. Va
os 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 l
s 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 d
l punto 9
í que cambia un poco la cosa.
Vamos allá:
1.-
Creamos una tabla,
a la que
llamaremos TPass.
Esta tabla
contendrá
dos
ca pos: NomUser y P
ss. El campo NomUser lo definimos como texto
y le
est
blecemos
a longitud
en 10 caracteres (optativo, pero es mejor delimitar la
lon
itud para
no tener
un campo
inútil de
255 caracteres). El
campo Pass lo
est
blecemos
ambié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 enos 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 es ará 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á
1 La BD desarrollada según este ejemplo la podéis encontrar aquí.
4.-
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:
•
• Cuadro de texto
Nombre: le escribimos cboUser
o En su etiqueta escribimos Contraseña:
o Sacamos sus propiedades y le e
 Pestaña Datos
tablecem
s lo siguiente:
• Máscar
de entrada: contraseña
 Pestaña Otras:
• Nombr
: le escribimos txtPass
• Botón de comando: será el
ue nos pe mitirá aceptar los datos. Lo creamos
en el formulario
(cancela
os 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 Otr
s->Nombre lo llamamos cmdCancelar
5.-
Vamos a
configur
r el formulario para que tenga unas
determinadas
car
cterísticas. Para ello
acamos las propiedades del formulario y:
Pesta
o o
o
Formato:
ítulo: le ponemos de título PASSWORD
entrado automático: SÍ
stilo 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:
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
aparece, le decimos que
editor de VB
queremos generar
código. Nos aparecerá el
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 no
FAutorizado2.
bre de FAutorizado1
y creamos otro llamado
10.
Abrimos la tabla
ass 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
endrá acceso sólo a
FAutorizado1; Usuario2 tendrá
sólo
ac so a FAutorizado2.
11 Creamos
otro formulario en blanco y lo
llamaremos FMenu.
Insertamos dos
bo nes de cm AbreFA2.
omando.
Uno, de
nombre
cmdAbreFA1, y otro, de nombre
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
End If
End Sub
---
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 advertencia.
autorizada. Si coinciden deja
paso, si
no lanza
un mensaje de
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
"AVISO" End If End Sub
ara acced
r a este formulario", vbInformation,
---
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
tras->Nombre). Este
formulario será nuestro “topo” que
nos dará la información, de manera totalmente oculta, sobre qué usuario es el que
ma ipula la BD. Desde el panel de exploración sacamos sus propiedades de vista y lo arcamos como oculto.
15
le a
---
Ahora sí
ignamos
olvemos a nuestro formulario FPass. Al botón de comando ACEPTAR
l 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
If IsNull(vPass) Then
"AVISO"
MsgBox
"No ha introducido ninguna contraseña",
vbInformation,
Me.txtPass.SetFocus
Exit Sub
End If
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
lanco, lanzando un mensaje de advertencia si así ocurre.
vTPass = DLookup("[Pass]", "TPass", "[NomUser] = '" & vUser & "'")
Pa buscar
el nombre de usuario es coincidente con su contraseña hemos
utili
ado esta
ez el método DLookUp, asigna
do el valor devuelto por el mismo a
la v
riable 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 variable vTPass.
valor devuelto será
guardado
en la
If vTPass = vPass Then
DoCmd.OpenForm "FChivato", , , , , acHidden Forms!FChivato.txtUser.Value = vUser DoCmd.OpenForm "FMenu"
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
Cierra el formulario FPass
Si no coinciden las constraseñas entonces
Lanza un mensaje de aviso
---
Ahora, en todo momento, FChiv
o estará
espiando”,
y nadie
lo sabrá (salvo
nosotros, claro), y además txtUser nos “chiv
rá” el nombre de usuario cuando lo
necesitemos. En este ejemplo nos formularios FAutorizado1 y FAutoriz
sirve para do2.
comprobar si se tiene acceso
a los
Evidentemente lo anterior sería ext apolable 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 e
¡Su
o es todo. Espero qu
rte!
lo anterior os sea útil para vuestras BD’s.