Incompatibilidad de variables en un evento
Hola apreciadísimo experto.
El formulario de autentificación me sigue dando quebraderos de cabeza. He intentado que cada usuario tenga 3 intentos de acceso por sesión y que se compruebe si el usuario tiene el acceso bloqueado y si es así se cierre la aplicación. Pero no se que he hecho mal para que no funcione. El código que utilizo es el siguiente:
Private Sub Aceptar_Click()
Dim Permiso As Integer
Dim rst As Recordset
Set Permiso = CurrentDb.OpenRecordset("Select Password From Usuarios where Password = '" & Forms![frmAutentificar]![Password].Value & "'")
'Set rst = CurrentDb.OpenRecordset("Select Bloqueado From Usuarios where NombreUsuario = '" & Forms![frmAutentificar]![NombreUsuario].Value & "'")
If rst!Bloqueado = True Then
Me.NombreUsuario.Value = ""
Me.Password.Value = ""
Me.NombreUsuario.SetFocus
MsgBox "Usuario no autorizado o con password bloqueada", vbCritical, " ¡ ATENCIÓN ! Acceso denegado "
DoCmd.Close acForm, "frmAutentificar"
End If
'Permiso = DLookup("[Usuarios].[Password]", "[Usuarios]", "[Password] Like '" & Forms![frmAutentificar]![Password].Value & "*'")
If Intentos >= 3 Then
MsgBox "Usuario no autorizado o con password bloqueada", vbCritical, " ¡ ATENCIÓN ! Acceso denegado "
DoCmd.Close acForm, "frmAutentificar"
End If
If Permiso = Forms![frmAutentificar]![Password].Value Then
Intentos = 0
DoCmd.Close acForm, "frmAutentificar"
DoCmd.OpenForm "PANEL DE CONTROL"
Else
Intentos = Intentos + 1
If Intentos = 1 Then
'MsgBox " " & Intentos & "º intento de Permiso fallido, le quedan dos más ", 48, " ¡ ATENCIÓN ! Clave de acceso incorrecta "
MsgBox "Primer intento de acceso fallido, le quedan dos más ", 48, " ¡ ATENCIÓN ! Clave de acceso incorrecta "
Password.SetFocus
Me.Password.Value = ""
Exit Sub
ElseIf Intentos = 2 Then
MsgBox "Segundo intento de acceso fallido, le queda otro intento ", 48, " ¡ ATENCIÓN ! Clave de acceso incorrecta "
Password.SetFocus
Me.Password.Value = ""
Exit Sub
ElseIf Intentos >= 3 Then
MsgBox "Tercer intento de acceso fallido, no le quedán más intentos ", 48, " ¡ ATENCIÓN ! Clave de acceso incorrecta "
MsgBox "Usuario no autorizado o con password bloqueada", vbCritical, " ¡ ATENCIÓN ! Acceso denegado "
DoCmd.Close acForm, "frmAutentificar"
Exit Sub
End If
End If
End Sub
Y el caso es que la primera parte del código:
Dim rst As Recordset
'Set rst = CurrentDb.OpenRecordset("Select Bloqueado From Usuarios where NombreUsuario = '" & Forms![frmAutentificar]![NombreUsuario].Value & "'")
If rst!Bloqueado = True Then
Me.NombreUsuario.Value = ""
Me.Password.Value = ""
Me.NombreUsuario.SetFocus
MsgBox "Usuario no autorizado o con password bloqueada", vbCritical, " ¡ ATENCIÓN ! Acceso denegado "
End If
Así como el restante código, cuando lo separo y lo pongo en eventos diferentes, si que todo funciona, pero necesito que todo esté dentro del evento Aceptar_Click(), ya que cuando un usuario agote sus tres intentos quiero que el campo Bloqueado de la tabla Usuarios se almacene como TRUE.
También he pensado, que para evitar que cualquier usuario espabilado pueda burlar mi seguridad (cambiando de nombre tras el primer intento fallido), guardar el número de intentos en un campo de la tabla "Usuarios", pero no se como hacerlo.
El formulario de autentificación me sigue dando quebraderos de cabeza. He intentado que cada usuario tenga 3 intentos de acceso por sesión y que se compruebe si el usuario tiene el acceso bloqueado y si es así se cierre la aplicación. Pero no se que he hecho mal para que no funcione. El código que utilizo es el siguiente:
Private Sub Aceptar_Click()
Dim Permiso As Integer
Dim rst As Recordset
Set Permiso = CurrentDb.OpenRecordset("Select Password From Usuarios where Password = '" & Forms![frmAutentificar]![Password].Value & "'")
'Set rst = CurrentDb.OpenRecordset("Select Bloqueado From Usuarios where NombreUsuario = '" & Forms![frmAutentificar]![NombreUsuario].Value & "'")
If rst!Bloqueado = True Then
Me.NombreUsuario.Value = ""
Me.Password.Value = ""
Me.NombreUsuario.SetFocus
MsgBox "Usuario no autorizado o con password bloqueada", vbCritical, " ¡ ATENCIÓN ! Acceso denegado "
DoCmd.Close acForm, "frmAutentificar"
End If
'Permiso = DLookup("[Usuarios].[Password]", "[Usuarios]", "[Password] Like '" & Forms![frmAutentificar]![Password].Value & "*'")
If Intentos >= 3 Then
MsgBox "Usuario no autorizado o con password bloqueada", vbCritical, " ¡ ATENCIÓN ! Acceso denegado "
DoCmd.Close acForm, "frmAutentificar"
End If
If Permiso = Forms![frmAutentificar]![Password].Value Then
Intentos = 0
DoCmd.Close acForm, "frmAutentificar"
DoCmd.OpenForm "PANEL DE CONTROL"
Else
Intentos = Intentos + 1
If Intentos = 1 Then
'MsgBox " " & Intentos & "º intento de Permiso fallido, le quedan dos más ", 48, " ¡ ATENCIÓN ! Clave de acceso incorrecta "
MsgBox "Primer intento de acceso fallido, le quedan dos más ", 48, " ¡ ATENCIÓN ! Clave de acceso incorrecta "
Password.SetFocus
Me.Password.Value = ""
Exit Sub
ElseIf Intentos = 2 Then
MsgBox "Segundo intento de acceso fallido, le queda otro intento ", 48, " ¡ ATENCIÓN ! Clave de acceso incorrecta "
Password.SetFocus
Me.Password.Value = ""
Exit Sub
ElseIf Intentos >= 3 Then
MsgBox "Tercer intento de acceso fallido, no le quedán más intentos ", 48, " ¡ ATENCIÓN ! Clave de acceso incorrecta "
MsgBox "Usuario no autorizado o con password bloqueada", vbCritical, " ¡ ATENCIÓN ! Acceso denegado "
DoCmd.Close acForm, "frmAutentificar"
Exit Sub
End If
End If
End Sub
Y el caso es que la primera parte del código:
Dim rst As Recordset
'Set rst = CurrentDb.OpenRecordset("Select Bloqueado From Usuarios where NombreUsuario = '" & Forms![frmAutentificar]![NombreUsuario].Value & "'")
If rst!Bloqueado = True Then
Me.NombreUsuario.Value = ""
Me.Password.Value = ""
Me.NombreUsuario.SetFocus
MsgBox "Usuario no autorizado o con password bloqueada", vbCritical, " ¡ ATENCIÓN ! Acceso denegado "
End If
Así como el restante código, cuando lo separo y lo pongo en eventos diferentes, si que todo funciona, pero necesito que todo esté dentro del evento Aceptar_Click(), ya que cuando un usuario agote sus tres intentos quiero que el campo Bloqueado de la tabla Usuarios se almacene como TRUE.
También he pensado, que para evitar que cualquier usuario espabilado pueda burlar mi seguridad (cambiando de nombre tras el primer intento fallido), guardar el número de intentos en un campo de la tabla "Usuarios", pero no se como hacerlo.
1 Respuesta
Respuesta de santiagomf
1