Comprobación de administrador y usuario en access

Quisiera su ayuda por favor para el siguiente código, para que me puedan indicar dónde estoy cometiendo el error. Sucede que actualmente por ejemplo cuando quiero entrar como Administrador, a pesar de ingresar la información correcta me tira el mensaje de que no lo soy. Anterior a colocar la comprobación al entrar como administrador, me abría el formulario pero "maquillado" como si fuera usuario.

Private Sub CmdAceptarId_Click()
Dim Contrase As Variant
Dim vNombre As String
If Nz(Me.TxtContraseña, "") = "" Then
MsgBox "El campo de la contraseña está vacío", vbCritical, "INGRESE SU CONTRASEÑA"
Me.TxtContraseña.SetFocus
Else
If Nz(DLookup("Contraseña", "07PERSONAL USUARIOS", "Contraseña='" & Me.TxtContraseña & "'"), "") <> "" Then
Contrase = Nz(DLookup("Contraseña", "07PERSONAL USUARIOS", "Contraseña='" & Me.TxtContraseña & "'"), "")
End If
vNombre = Nz(DLookup("NombrePer", "07PERSONAL USUARIOS", "CodPer='" & Me.TxtUsuario & "'"), "")
If Contrase <> Me.TxtContraseña Then
MsgBox "Contraseña incorrecta", vbCritical, "A D V E R T E N C I A"
Else
If Nz(DLookup("Privilegio", "07PERSONAL USUARIOS", "CodPer='" & Me.TxtUsuario & "'"), "") = "Administrador" Then
DoCmd.Close acForm, Me.Name
MsgBox "" & vbCrLf & "'" & vNombre & "'", vbExclamation, "¡BIENVENIDO AL SISTEMA BIBCUNIZAB!"
DoCmd.OpenForm "03PANEL DE CONTROL", acNormal
Else
Salida:
DoCmd.Close acForm, Me.Name
MsgBox "Usted no es Administrador", vbCritical, "ADVERTENCIA"
Exit Sub
If Nz(DLookup("Privilegio", "07PERSONAL USUARIOS", "CodPer='" & Me.TxtUsuario & "'"), "") = "Usuario" Then
DoCmd.Close acForm, Me.Name
MsgBox "" & vbCrLf & "'" & vNombre & "'", vbExclamation, "¡BIENVENIDO AL SISTEMA BIBCUNIZAB!"
DoCmd.OpenForm "03PANEL DE CONTROL"
With Forms("03PANEL DE CONTROL")
.CmdUsuario.Enabled = False
.CmdPrivil.Enabled = False
.CmdUsuario.Visible = False
.EtqAdmon.Visible = False
.CmdPrivil.Visible = False
.CmdEgreso.Enabled = False
End With
Else
Resume Salida
End If
End If
End If
End If
End Sub

2 respuestas

Respuesta
1

Amigo el código esta un poco desordenado y confuso por eso me tomé la molestia de ordenarlo, saludos

Private Sub CmdAceptarId_Click()
Dim Contrase As String, vNombre As String, privilegio As String

If Nz(Me.Me.TxtUsuario, "") = "" Then
MsgBox "El campo usuario está vacío", vbCritical, "INGRESE NOMBRE DE USUARIO"
Me.Me.TxtUsuario.SetFocus
Exit Sub
ElseIf Nz(Me.TxtContraseña, "") = "" Then
MsgBox "El campo de la contraseña está vacío", vbCritical, "INGRESE SU CONTRASEÑA"
Me.TxtContraseña.SetFocus
Exit Sub
End If
vNombre = Nz(DLookup("NombrePer", "07PERSONAL USUARIOS", "CodPer='" & Me.TxtUsuario & "'"), "")

If vNombre = "" Then MsgBox "usuario inexistente", vbCritical, "Vuelva a intentar ": Me.Me.TxtUsuario: Exit Sub
Contrase = Nz(DLookup("Contraseña", "07PERSONAL USUARIOS", "CodPer='" & Me.TxtUsuario & "'"), "")
privilegio = Nz(DLookup("Privilegio", "07PERSONAL USUARIOS", "CodPer='" & Me.TxtUsuario & "'"), "") = "Administrador"
If Not Contrase = Me.TxtContraseña Then
MsgBox "Contraseña incorrecta", vbCritical, "A D V E R T E N C I A"
Me.TxtContraseña.SetFocus
Exit Sub
End If
' SI LLEGO ACA QUIERE DECIR QUE ENTRÓ PREGUNTO SOBRE PRIVILEGIOS
DoCmd.Close acForm, Me.name
DoCmd.OpenForm "03PANEL DE CONTROL", acNormal

If privilegio = "Administrador" Then
MsgBox "" & vbCrLf & "'" & vNombre & "'", vbExclamation, "¡BIENVENIDO AL SISTEMA BIBCUNIZAB!"
ElseIf privilegio = "Usuario" Then
MsgBox "Usted no es Administrador", vbCritical, "ADVERTENCIA"
MsgBox "" & vbCrLf & "'" & vNombre & "'", vbExclamation, "¡BIENVENIDO AL SISTEMA BIBCUNIZAB!"
With Forms("03PANEL DE CONTROL")
.CmdUsuario.Enabled = False
.CmdPrivil.Enabled = False
.CmdUsuario.Visible = False
.EtqAdmon.Visible = False
.CmdPrivil.Visible = False
.CmdEgreso.Enabled = False
End With
End If

End Sub

Me equivoque donde dice Me. Me. TxtUsuario tendría que decir Me. TxtUsuario. Setfocus . Cópialo y pégalo tiene que andar

¡Gracias!  Jajaja,, tienes razón el código está un poco desordenada, pero con las ayuda recibidas de ustedes lo he logrado. Saludos cordiales!!!

Contrase = Nz(DLookup("Contraseña", "07PERSONAL USUARIOS", "Contraseña='" & Me.TxtContraseña & "'"), "")
vNombre = Nz(DLookup("NombrePer", "07PERSONAL USUARIOS", "CodPer='" & Me.TxtUsuario & "'"), "")
vPrivilegio = Nz(DLookup("Privilegio", "07PERSONAL USUARIOS", "CodPer='" & Me.TxtUsuario & "'"), "")
If Nz(Me.TxtContraseña, "") = "" Then
MsgBox "El campo de la contraseña está vacío", vbCritical, "INGRESE SU CONTRASEÑA"
Me.TxtContraseña.SetFocus
Exit Sub
End If
If Contrase <> Me.TxtContraseña Then
MsgBox "Contraseña incorrecta", vbCritical, "A D V E R T E N C I A"
Me.TxtContraseña.SetFocus
Exit Sub
End If
' SI LLEGÓ ACA QUIERE DECIR QUE ENTRÓ, PREGUNTO SOBRE PRIVILEGIOS
If vPrivilegio = 1 Then
DoCmd.Close acForm, Me.Name
MsgBox "" & vbCrLf & "'" & vNombre & "'", vbExclamation, "¡BIENVENIDO AL SISTEMA BIBCUNIZAB!"
DoCmd.OpenForm "03PANEL DE CONTROL", acNormal
Exit Sub
ElseIf vPrivilegio = 2 Then
MsgBox "Usted es un usuario. " & vbCrLf & "'" & vNombre & "'", vbExclamation, "¡BIENVENIDO AL SISTEMA BIBCUNIZAB!"
DoCmd.Close acForm, Me.Name
DoCmd.OpenForm "03PANEL DE CONTROL"
With Forms("03PANEL DE CONTROL")
.CmdUsuario.Enabled = False
.CmdPrivil.Enabled = False
.CmdUsuario.Visible = False
.EtqAdmon.Visible = False
.CmdPrivil.Visible = False
.CmdEgreso.Enabled = False
End With
End If
End Sub
Respuesta
1

El error lo tienes en esta parte:

If Nz(DLookup("Privilegio", "07PERSONAL USUARIOS", "CodPer='" & Me.TxtUsuario & "'"), "") = "Administrador" ThenDoCmd.Close acForm, Me.Name

porque en tu tabla "07 PERSONAL USUARIOS", el campo Privilegio es numérico y no de texto, por eso nunca se te cumple la condición (si no has cambiado el diseño de las tablas desde entonces).

Para que te funcione, tendrás que usar esto:

If Nz(DLookup("Privilegio", "07PERSONAL USUARIOS", "CodPer='" & Me.TxtUsuario & "'"), "") = 1 Then
DoCmd. Close acForm, Me. Name

Y lo mismo tendrás que hacer con Usuario.

¡Gracias! Bueno no quería funcionar porque me abría el panel como administrador aun cuando ingresara como usuario; ordené un poquito y me parece que lo que fallaba era que faltaba una salida Exit Sub al comprobar el primer privilegio, el código funcionando quedó así 

Contrase = Nz(DLookup("Contraseña", "07PERSONAL USUARIOS", "Contraseña='" & Me.TxtContraseña & "'"), "")
vNombre = Nz(DLookup("NombrePer", "07PERSONAL USUARIOS", "CodPer='" & Me.TxtUsuario & "'"), "")
vPrivilegio = Nz(DLookup("Privilegio", "07PERSONAL USUARIOS", "CodPer='" & Me.TxtUsuario & "'"), "")
If Nz(Me.TxtContraseña, "") = "" Then
MsgBox "El campo de la contraseña está vacío", vbCritical, "INGRESE SU CONTRASEÑA"
Me.TxtContraseña.SetFocus
Exit Sub
End If
If Contrase <> Me.TxtContraseña Then
MsgBox "Contraseña incorrecta", vbCritical, "A D V E R T E N C I A"
Me.TxtContraseña.SetFocus
Exit Sub
End If
' SI LLEGÓ ACA QUIERE DECIR QUE ENTRÓ, PREGUNTO SOBRE PRIVILEGIOS
If vPrivilegio = 1 Then
DoCmd.Close acForm, Me.Name
MsgBox "" & vbCrLf & "'" & vNombre & "'", vbExclamation, "¡BIENVENIDO AL SISTEMA BIBCUNIZAB!"
DoCmd.OpenForm "03PANEL DE CONTROL", acNormal
Exit Sub
ElseIf vPrivilegio = 2 Then
MsgBox "Usted es un usuario. " & vbCrLf & "'" & vNombre & "'", vbExclamation, "¡BIENVENIDO AL SISTEMA BIBCUNIZAB!"
DoCmd.Close acForm, Me.Name
DoCmd.OpenForm "03PANEL DE CONTROL"
With Forms("03PANEL DE CONTROL")
.CmdUsuario.Enabled = False
.CmdPrivil.Enabled = False
.CmdUsuario.Visible = False
.EtqAdmon.Visible = False
.CmdPrivil.Visible = False
.CmdEgreso.Enabled = False
End With
End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas