¿Cómo unificar código para deshabilitar y habilitar la tecla shift y restringir campos a usuarios en Access 2016?
Solicito amablemente su valiosa ayuda para resolver lo siguiente:
1.-Necesito restringir la edición de algunos campos y botones de comando de mis formularios a usuarios no autorizados. Es importante mencionar que este punto ya lo tengo solucionado con la siguiente macro la cual depende de las tablas "usuarios" y "registro", y se ejecuta desde un login de acceso.
'Private Sub CmbValidarRegistro_Click()
'If Nz(DCount("usuario", "usuarios", "contraseña = forms!usuarios!contraseña and usuario=forms!usuarios!usuario")) >= 1 Then
' DoCmd.SetWarnings False
' DoCmd.RunSQL "insert into registro(usuario,fecha,hora)values(Usuario,date(),time())"
' DoCmd.OpenForm "Frm_INICIO"
' DoCmd.Close acForm, "AccesoUsuarios"
'
'Else
' Contador = Contador + 1
' MsgBox "Verifica tu contraseña, " & Me.[Usuario], vbOKOnly, "Aviso, llevas " & Me.Contador & " intento(s)"
' DoCmd.CancelEvent
' If Contador = 3 Then
' MsgBox " Lo siento, tú no estás autorizado", vbOKOnly + vbCritical, "Intentalo más tarde"
' DoCmd.Quit
' End If
'End If
'End Sub
2.- Necesito proteger la estructura de mi BD antes de compartirla para que ningún usuario pueda acceder mediante la tecla shift, y solo yo como admin puedo habilitarla desde un optionbutton de mi form privilegios de admin, para ello, he sustituido la macro anterior para ejecutar esta otra desde el login de acceso, el código es el siguiente :
Private Sub CmbValidarUsuario_Click()
Dim OnOfRibbon As Integer
Dim OnOfShift As Integer
If IsNull(Me.txtUsuario) Then
MsgBox "Por favor, escriba su Usuario", vbInformation, "Usuario requerido"
Me.txtUsuario.SetFocus
ElseIf IsNull(Me.txtPass) Then
MsgBox "Por favor, ingrese su Contraseña", vbInformation, "Contraseña requerida"
Me.txtContraseña.SetFocus
Else
If (IsNull(DLookup("[Usuario]", "Usuarios", "[Usuario] ='" & Me.txtUsuario.Value & _
"' And Contraseña = '" & Me.txtConstraseña.Value & "'"))) Then
MsgBox "Usuario y/o Contraseña incorrectos"
Else
OnOfShift = DLookup("Activar_Shift", "Usuarios", "Usuario = '" & Me.txtUsuario.Value & "'")
OnOfRibbon = DLookup("Mostrar_Cinta_Opciones", "Usuarios", "Usuario = '" & Me.txtUsuario.Value & "'")
UserLevel = DLookup("Admin", "Usuarios", "Usuario = '" & Me.txtUsuario.Value & "'")
If OnOfShift = -1 Then
TeclaShift "AllowBypassKey", dbBoolean, True
Else
TeclaShift "AllowBypassKey", dbBoolean, False
End If
If OnOfRibbon = -1 Then
DoCmd.ShowToolbar "Ribbon", acToolbarYes
Else
DoCmd.ShowToolbar "Ribbon", acToolbarNo
End If
If UserLevel = -1 Then
LogedUser = Me.txtUsuario.Value
DoCmd.Close
DoCmd.OpenForm "FrmMenu"
Else
LogedUser = Me.txtUsuario.Value
DoCmd.Close
DoCmd.OpenForm "FrmMenu"
End If
End If
End If
End Sub
Esta macro funciona sin problema, solo yo puedo habilitar o deshabilitar la tecla shift para poder modificar la estructura de mi BD cuando lo requiera. Sin embargo, la desventaja es que al desactivar la primera macro, todos los campos y botones de mis forms quedan habilitados para cualquier usuario y se compromete la integridad de la información.
Por lo tanto, necesito unificar y optimizar estas dos macros en una sola para que se ejecute desde el login, y con ello lograr el propósito de ambas con el fin de salvaguardar la integridad de la información, así como, la estructura de la BD.
Motivo por el cual recurro a su amplia experiencia y conocimiento para resolver lo anterior.