Existen muchas razones por las que podemos llegar a necesitar proteger un programa en Access mediante una contraseña.
Por lo general, el motivo suele estar relacionado con la seguridad y el control del acceso a la información del mismo. Sin embargo, también se me ocurre que la razón sea la de identificar al usuario que está utilizando el programa en un momento determinado para poder así registrar quién modifica dicha información.
Por eso, sea cual sea tu necesidad, vamos a crear un formulario de acceso mediante usuario y contraseña. ¡Vamos allá!
En primer lugar, te muestro el formulario "FPass" que hemos creado para tal fin,
Es muy sencillito, pero con esto nos basta.
A continuación, es necesario crear una tabla donde daremos de alta a los usuarios con sus contraseñas correspondientes. En el ejemplo, le he puesto el nombre "TPass" y he dado de alta a dos usuarios: "administrador" y "usuario".
Vamos ahora con el código que debemos introducir en el formulario "FPass",
Dim vUser As String, vPass As String
Dim vCompruebo As Variant
'Guardamos los valores introducidos
vUser = Nz(Me.cboUser.Value, "")
vPass = Nz(Me.txtPass.Value, "")
'Si alguno de los campos está vacío, avisamos y salimos
If vUser = "" Or vPass = "" Then
MsgBox "Es necesario rellenar los dos campos", vbOKOnly, "Error"
Exit Sub
End If
'Buscamos la contraseña correcta en la tabla Passwords según el usuario que ha accedido
vCompruebo = DLookup("[Contraseña]", "TPass", "[Usuario]='" & vUser & "'")
'Comprobamos si la contraseña introducida coincide con la de la tabla
If vPass = vCompruebo Then
DoCmd.OpenForm "FMenu"
DoCmd.Close acForm, "FPass"
Else
'Si no coincide avisamos y salimos
MsgBox "Contraseña incorrecta", vbOKOnly, "Error"
txtPass.SetFocus
txtPass.Text = ""
Exit Sub
End If
End Sub
Veamos el código detenidamente.
Lo primero que hacemos es guardar los valores de los campos "Usuario" y "Contraseña" en las variables vUser y vPass.
A continuación, comprobamos que ambas variables contengan datos, es decir, que los campos se encuentren rellenos. En caso negativo, mostramos un aviso indicándolo.
Dim vUser As String, vPass As String
Dim vCompruebo As Variant
'Guardamos los valores introducidos
vUser = Nz(Me.cboUser.Value, "")
vPass = Nz(Me.txtPass.Value, "")
'Si alguno de los campos está vacío, avisamos y salimos
If vUser = "" Or vPass = "" Then
MsgBox "Es necesario rellenar los dos campos", vbOKOnly, "Error"
Exit Sub
End If
En el caso en que se encuentren rellenos ambos campos, el código continúa consultando en la tabla "TPass" la contraseña correcta para el usuario seleccionado utilizando la función DLookUp en Access.
vCompruebo = DLookup("[Contraseña]", "TPass", "[Usuario]='" & vUser & "'")
Ahora comprobamos si la contraseña de la tabla coincide con la introducida por el usuario en el formulario.
En caso afirmativo, abrimos el programa y cerramos el formulario de acceso.
If vPass = vCompruebo Then
DoCmd.OpenForm "FMenu"
DoCmd.Close acForm, "FPass"
Si por el contrario no coinciden, mostramos un aviso,
MsgBox "Contraseña incorrecta", vbOKOnly, "Error"
txtPass.SetFocus
txtPass.Text = ""
Exit Sub
End If
End Sub
Finalmente, recalcar la importancia de proteger el código. De lo contrario, cualquiera podría acceder a vuestra base de datos en modo administrador y deshabilitarlo.
Espero que te haya servido este artículo y que a partir de ahora puedas proteger con contraseña tus programas desarrollados en Access sin ningún problema.
Por último, quiero invitarte a compartir tus dudas en los comentarios o en el foro. Intentaré ayudarte en todo lo que pueda, y así aprenderemos todos.
Hasta la próxima.
Si te ha servido y quieres donar
Descarga el archivo del ejemplo
2 Comentarios
Enviar un comentario
Últimas publicaciones
Ante todo, agradecerle el tiempo que dedica a iluminar el camino a los que, como yo, somos neófitos en la programación de VBA Access. He adaptado el ejemplo a mi proyecto y funciona perfectamente. En el mismo sentido, me gustaría si ello fuera posible, que subiera algún ejemplo para poder establecer permisos a los distintos perfiles de usuarios. GRACIAS
Buenos días Jose María,
Lo anoto. En el próximo post subiré un ejemplo sobre este tema.
Saludos.