Menú principal de usuarios con bloqueo de formularios.

Ya casi he terminado una base de datos en la que he trabajado pero me pidieron que esta tuviera un menú con de claves administrador/usuario y que al acceder el administrador tuviera acceso a toda la base mientras que el usuario solo tenga acceso en modo lectura sin poder eliminar ni editar nada. Por ahora hice un menú en base a una tabla de usuarios y este al introducir la contraseña correcta me dirige a un submenú de pestañas que contienen todos los formularios, este es el código:

Private Sub Comando5_Click()
USUARIO = DFirst("LOGIN", "USUARIOS", "LOGIN='" & Me.txtUsuario & "'")
clave = DFirst("CLAVE", "USUARIOS", "LOGIN='" & Me.txtUsuario & "'")

If IsNull(Me.txtUsuario) Or IsNull(Me.txtClave) Then
MsgBox "Escriba el usuario y la clave y pulse Ingresar", vbExclamation, "Atención"
Exit Sub
End If

If USUARIO = "" Or IsNull(USUARIO) Then
MsgBox "El usuario no existe en la base de datos", vbExclamation, "Usuario no válido"
Else
If clave = Me.txtClave Then
MsgBox "Bienvenido al Sistema", vbInformation, "Welcome"
DoCmd.Close
DoCmd.OpenForm "SUBMENU"
Else
MsgBox "La clave no es correcta", vbExclamation, "Clave incorrecta"
End If

End Sub

Mi pregunta es: ¿Cómo puedo hacer que al dirigirme al submenú (dependiendo de ser admin o usuario) me permita tener todo en edición o solo lectura?

2 Respuestas

Respuesta
2

Después del mensaje de welcome puedes poner

select case usuario

case is="administrador"

docmd.openform"el que sea"

case else

DoCmd.OpenForm "el que sea", , , , acFormReadOnly

end select

Gracias por responder lo intente de esa manera pero al entrar en el submenú no respeta el código y sigue dejándome escribir y eliminar. Utilicé como prueba uno de los formularios que tengo: 

Private Sub Comando5_Click()
usuario = DFirst("LOGIN", "USUARIOS", "LOGIN='" & Me.txtUsuario & "'")
clave = DFirst("CLAVE", "USUARIOS", "LOGIN='" & Me.txtUsuario & "'")

If IsNull(Me.txtUsuario) Or IsNull(Me.txtClave) Then
MsgBox "Escriba el usuario y la clave y pulse Ingresar", vbExclamation, "Atención"
Exit Sub
End If

If usuario = "" Or IsNull(usuario) Then
MsgBox "El usuario no existe en la base de datos", vbExclamation, "Usuario no válido"
Else
If clave = Me.txtClave Then
MsgBox "Bienvenido al Sistema", vbInformation, "Welcome"
Select Case usuario

Case Is = "administrador"

DoCmd.OpenForm "[(FUERZA) REGISTRO GENERAL]"

Case Else

DoCmd.OpenForm "(FUERZA) REGISTRO GENERAL", , , acFormReadOnly

End Select
DoCmd.Close
DoCmd.OpenForm "SUBMENU"
Else
MsgBox "La clave no es correcta", vbExclamation, "Clave incorrecta"

End If
End If


End Sub

Utilice los corchetes y también se los quite pero no me deja, habrá otro problema?

Otra cosa que acabo de notar es que al usar tu código ya no cierra el menú principal se queda abajo del submenú.

Creo que lo mejor, si quieres, es que me mandes un mensaje a [email protected] y te mando un ejemplo. Sólo el mensaje. Si lo haces, en el asunto del mensaje pon tu alias Rogger, ya que si no sé quien me escribe ni los abro.

Respuesta
1

Aun te falta mucho por programar me puedes mostrar la tabla de usuarios y el formulario login y desde ahí partimos

Mientras echale un vistazo al sistema que cree a ver si te da una idea

https://www.youtube.com/watch?v=B1X4sNj4aYs&t=189s 

Gracias por responder, en si quiero simplificar un poco la base ya que no tengo muchos conocimientos de programación pero lo que he podido hacer es algo así.

Esta es mi tabla de usuarios con sus contraseñas:

Las contraseñas son depositadas en este formulario (menú principal):

El cual en el botón "INGRESAR" contiene este código:

Que al ingresar correctamente el usuario y clave me dirige al siguiente sub menú:

Este contiene en cada pestaña un botón (o varios) que dirigen a sus formularios e informes mediante macros.

Con esto ya armado me gustaría saber que código o macro puedo insertar, y en donde, para que al utilizar "ADMINISTRADOR" pueda editar los formularios e informes, mientras que el que entre con "USUARIO" solo pueda consultar los registros de los formularios o ver los informes.

Ok lo que deves hacer es que en el formulario que se va abrir aparescan todos los campos in habilitados (a ecepcion de alguno que sea consulta)

Deves crear un procedimiento de evento al cargar (el formulario que deseas abrir)

Y que te valide en la tabla de usuario si tienes acceso(de administrador) o no

Si lo tienes que habilite todos los campos y si no que mande un mensaje que no eres admin(o simplemente que no haga nada)

En la tabla de usuarios tienes que poner un campo por formulario y dar o quitar acceso

Como en esta tabla

el codigo seria algo parecido a esto

Private Sub cmd_AgregarProductos_Click()

UserLevel = (IsNull(DLookup("[AgregarProductos]", "Usuarios", "[AgregarProductos] = 0 " _
& " AND [Usuario] = '" & Form_Menu_Principal.lbl_UsuarioActivo.Caption & "'")))
If UserLevel = -1 Then
DoCmd.OpenForm "NUEVOS_Productos"
Else
MsgBox "No estás autorizado para acceder al siguiente módulo", vbCritical, "Acceso denegado"
End If

End Sub

Ya había visto ese tipo de código con la tabla pero en realidad no lo ocupo de esa manera, lo único que necesito es que los dos usuarios tanto admin como usuario puedan ver todos los formularios (no negarles el acceso) solo que administrador pueda editar agregar y borrar pero usuario solo pueda verlos la información sin el privilegio de ediciones borrados y etc...

Entonces solo agrega una columna en la tabla login y que te diga si es admin o usuario

Y al abrir el formulario que cheque esto y si es admin habilite los campos y si es usuario

Por ejemplo en una formulario que pida id, nombre1, nombre2, apellido1, apellido2, y direccion

Todos loscampos por default deven estar deshabilitados exepto el (id que sera con el cual haremos la busqueda) al entrar al formulario si es admin ejecutas en codigo que habilite los datos

Seria algo como esto

If UserLevel = -1 Then

me.nombre1.enabled = true

me.nombre2.enabled = true

me.apellido1.enabled = true

me.apellido2.enabled = true
Else
MsgBox "entrada de solo lectura", vbCritical, "Acceso compelto solo admin"
End If

La forma anterior funciona perfectamente observa este video que prepare especialmente para ti

https://youtu.be/avAd8ZQrDP0 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas