Problemas con código acceso usuario / contraseña

Estoy tratando de implementar en una base de datos un formulario de acceso mediante usuario y contraseña.

He copiado la estructura de un post antiguo y al insertar el código VBA se me generan problemas de expresión que no se solucionar:

El código para validar el usuario y la contraseña es el siguiente

Private Sub cmdAceptar_Click()
If IsNull(DLookup("IdUsuario", "tblUsuarios", "IdUsuario = '" & Me.txtIdUsuario & "'")) Then
Call MsgBox("El usuario no existe en nuestra base de datos.", vbCritical, "Atención")
Exit Sub
End If
Dim sContraseña As String
sContraseña = DLookup("Contraseña", "tblUsuarios", & "IdUsuario = '" & Me.txtIdUsuario & "'")
If sContraseña = Me.txtContraseña Then
Dim sNombre As String
sNombre = DLookup("Nombre", "tblUsuarios", "idUsuario= '" & Me.txtIdUsuario & "'")
Call MsgBox("Bienvenido " & sNombre & ", puede acceder al sistema." _
, vbInformation, "Datos correctos")
' Antes de cerrar el formulario vamos a guardar el idUsuario
' en la tabla "tblUsuarioActivo"
Dim sSQL As String
' Creamos una sentencia SQL que es una consulta de
' actualización de la tabla
sSQL = "UPDATE tblUsuarioActivo SET " "tblUsuarioActivo.IdUsuario = '" & Me.txtIdUsuario & "'"
DoCmd.SetWarnings False
DoCmd.RunSQL sSQL
DoCmd.SetWarnings True
DoCmd.Close
Else
Call MsgBox("La contraseña es incorrecta. Vuelva a intentarlo.", _
vbExclamation, "Datos correctos")
Me.txtContraseña.SetFocus
End If
End Sub

Aquíme sale "error de sintaxis" en la línea:

sContraseña = DLookup("Contraseña", "tblUsuarios", & "IdUsuario = '" & Me.txtIdUsuario & "'")

También he tenido que crear un módulo con el siguiente código:

Public Sub Permiso(sNombreFormulario As String)
' Lo primero que haremos es cargar el usuario activo
Dim sUsuarioActivo As String
sUsuarioActivo = DLookup("IdUsuario", "tblUsuarioActivo")
' A continuación buscaremos de la tabla "tblUsuariosPermisos"
' que dice el campo "acceso" de ese formulario del usuario
' activo. Para ello usamos el Dlookup añadiendo los
' filtros por IdUsuario y Nombre del Formulario
Dim bPermisoFor As Boolean
bPermisoFor = DLookup("Acceso", "tblUsuariosPermisos", "IdUsuario= '" & sUsuarioActivo & "' AND NombreFormulario= '" & sNombreFormulario & "'")
' Con un Si o un No, en la variable "bPermisoFor"
' tomamos una decisión.
If bPermisoFor = False Then 'Informamos al usuario y le cerramos el formulario.
Call MsgBox("Usted no tiene permisos para visualizar este formulario", " Contacte con el administrador", vbCritical, Atención)
DoCmd.Close acForm, sNombreFormulario
End If
' Logicamente si la variable es SI no hacemos nada y
' dejamos que el formulario siga abriéndose.
End Sub

Este módulo desconozco si funciona ya que al aplicarlo en los distintos formularios, en el evento "al abrir", me sale "Error de compilación: se esperaba una variable o un procedimiento, no un módulo".  

El código que he introducido al abrir los formularios y que me genera dicho error es el siguiente:

Private Sub Form_Open(Cancel As Integer)
'Llamos al procedimiento de nuestro módulo
'pasándole el nombre del formulario
Call Permiso(Me.Name)
End Sub

1 respuesta

Respuesta
2

La primer vez en mi vida y tengo ya muchos años que para mostrar un msgbox se le pone

call msgbox

Es msgbox a palo seco

Por otro lado, pones

tblUsuarios", & "IdUsuario = '" & Me.txtIdUsuario & "'")

Ese símbolo en negrita ¿Para que sirve?

y todo el código puede resumirse en

If dcount("*","tblusuarios","contraseña='" & me.nombredelcuadro donde la escribes & "' and nombre='" & me.txtusuario & "'")>=1 then

lo que quieras que haga si acierta

else

lo que quieras que haga al fallar

end if

Lo he modificado de la siguiente forma y ya me permite introducir clave y contraseña, si es incorrecta el código funciona, pero si introduzco la correcta me sale el siguiente error: "Error de sítaxis en la instrucción UPDATE.

El código falla en esta línea:

' Antes de cerrar el formulario vamos a guardar el idUsuario
' en la tabla "tblUsuarioActivo"
Dim sSQL As String
' Creamos una sentencia SQL que es una consulta de
' actualización de la tabla

sSQL = "UPDATE tblUsuarioActivo SET""tblUsuarioActivo.IdUsuario = '" & Me.txtIdUsuario & "'"


' Al ejecutar la siguiente línea, al ser una consulta
' de actualización, Access mandará unos mensajes
' muy impertinentes sobre si quieres hacerlo o no
' pero al usuario de la aplicación no tiene que tomar
' esa decisión así que primero desactivamos los mensajes
' del sistema y a continuación ejecutamos la consulta

DoCmd.SetWarnings False
DoCmd.RunSQL sSQL
' Una vez ejecutada volvemos a activar los mensajes del sistema
DoCmd.SetWarnings True

DoCmd.Close

Además los formularios siguen sin poder abrirse ya que el código que llama al módulo también falla:

Private Sub Form_Open(Cancel As Integer)
'Llamos al procedimiento de nuestro módulo
'pasándole el nombre del formulario
Call Permiso(Me.Name)
End Sub

Error: "Se esperaba una variable o un procedimiento, no un módulo".

Acabo de darme cuenta yo solo que del fallo en la línea de código:

sSQL = "UPDATE tblUsuarioActivo SET tblUsuarioActivo.IdUsuario = '" & Me.txtIdUsuario & "'"

De esta forma el formulario de validación funciona correctamente.

El problema sigue estando como decía antes en la apertura de los demás formularios con la aplicación del un módulo que verifica que el usuario tiene permiso para acceder a dicho módulo.

Este es el código:

Private Sub Form_Open(Cancel As Integer)
'Llamos al procedimiento de nuestro módulo
'pasándole el nombre del formulario
Call Permiso(Me.Name)
End Sub

Y este es el error:

"Se esperaba una variable o un procedimiento, no un módulo".

Te he mandado un ejemplo a tu correo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas