Mejora Cuentas de Usuario Access?

Como dice el titulo quisiera mejorar un control de Acceso a mi base de datos. La cuestión es que deseo agregar una nueva variable.

Hasta el momento el formulario de control de acceso es el siguiente:

Con el siguiente codigo bvA:

Private Sub CmdEntrar_Click()
Dim auxContraseña As String
'Comprobamos que hay datos en las cajas de texto
If Nz(Me.TxtLogin.Value, "") = "" Then
MsgBox "Seleccione un nombre de usuario de la lista para acceder", vbInformation, "ATENCION"
Me.TxtLogin.SetFocus
ElseIf Nz(Me.TxtPassword.Value, "") = "" Then
MsgBox "Introduzca la contraseña del usuario seleccionado", vbInformation, "ATENCION"
Me.TxtPassword.SetFocus
Else
If Nz(DLookup("Password", "Usuarios", "Id_usuario=" & Me![TxtLogin]), "") <> "" Then
auxContraseña = DLookup("Password", "Usuarios", "Id_usuario=" & Me![TxtLogin])
End If
If auxContraseña <> Me.TxtPassword.Value Then
If NumIntentos > 1 Then
NumIntentos = NumIntentos - 1
MsgBox "La contraseña introducida es incorrecta" & vbCrLf & _
"Le quedan " & NumIntentos & " intentos" & vbCrLf & vbCrLf & _
"Por favor, introduzca otra", vbExclamation, "INTRODUCCIÓN INCORRECTA"
Me.TxtPassword.Value = ""
Me.TxtPassword.SetFocus
Else
MsgBox "Ha superado el numero de intentos", vbCritical, "ADIOS..."
DoCmd.RunCommand acCmdCloseDatabase 'y cerramos el de acceso
End If
Else
Dim Acceso As Integer

Acceso = DLookup("Id_acceso", "Usuarios", "Id_usuario=" & Me![TxtLogin])

Select Case Acceso

Case 1 'Es el id_acceso del Administrador

MsgBox "Has ingresado al sistema con permisos de Super-Administrador, por lo tanto tienes acceso a toda la informacion, apartados del sistema y ademas la creacion de cuentas de usuario", vbInformation, "INFORMACION"

DoCmd.OpenForm "Entorno de Super Administrador", acNormal, "", "", , acNormal

Case 2 'Es el id_acceso del Usuario

MsgBox "Has ingresado al sistema con permisos de Administrador, por lo tanto tendras acceso a los apartados correspondientes otorgados por el Super-Administrador", vbInformation, "INFORMACION"

DoCmd.OpenForm "Entorno de Administrador", acNormal, "", "", , acNormal

Case 3 'Es el id_acceso del Usuario Facturacion

MsgBox "Has ingresado al sistema con permisos de Digitador, por lo tanto tendras acceso a los apartados correspondientes otorgados por el Super-Administrador", vbInformation, "INFORMACION"
DoCmd.OpenForm "Entorno de Usuario2", acNormal, "", "", , acNormal

Case 4 'Es el id_acceso del Usuario Facturacion

MsgBox "Has ingresado al sistema con permisos de Visita, por lo tanto tendras acceso a los apartados correspondientes otorgados por el Super-Administrador", vbInformation, "INFORMACION"
DoCmd.OpenForm "Entorno de Usuario3", acNormal, "", "", , acNormal

Case 5 'Es el id_acceso del Usuario Facturacion

MsgBox "Este usuario actualmente se encuentra en labores de mantencion, por lo tanto se debera esperar a que el Super-Administrador libere el Entorno para trabajar de forma normal", vbInformation, "INFORMACION"
DoCmd.OpenForm "Entorno de Mantenimiento", acNormal, "", "", , acNormal
End Select

'DoCmd.OpenForm stDocName, , , stLinkCriteria 'Abrimos el formulario correspondiente
DoCmd.Close acForm, Me.NAME 'y cerramos el de acceso
End If
End If
End Sub

Bueno la actualización que deseo realizar el la siguiente:

Como notaran deseo que ademas de acceder al usuario con su correspondiente formulario y permisos. También quiero el pueda elegir la resolución de pantalla con la cual trabajara, para esto yo ya he generado 3 distintos formularios con sus respectivas resoluciones, como por ejemplo para el usuario de Super administrador e generado las siguientes:

Entorno de Super Administrador (1920x1080p) el cual ya esta considerado en el codigo

Entorno de Super Administrador 1600x900

Entorno de Super Administrador 1366x768

Sintetizando quiero adaptar el código para que el usuario final acceda a su apartado correspondiente y con la cualidad de elegir el modo de pantalla.

1

1 Respuesta

816.600 pts. No responderé preguntas de usuarios que no valoren las...

Si no te quieres complicar mucho, dentro de cada Case en el que estableces el tipo de usuario,  añadiría otro Select Case con las tres posibles resoluciones :

Case 1 ' administrador 

Select Case resolución

Case 1'1920x1080

....

Case 2 '1600x900

....

End Select 

Case 2 ' usuario 1

Select Case resolución

Case 1'1920x1080

....

Case 2 '1600x900

....

End se

Y así... 

Bueno antes que todo demasiadas gracias por tu pronta respuesta . Pero sabes soy nulo para estoy y creo que no se como seria la estructura del código... lo he realizado de esta manera pero esta claro que no logro hacerlo bien.

Ejemplo asi lo he puesto:

Private Sub CmdEntrar_Click()
Dim auxContraseña As String
'Comprobamos que hay datos en las cajas de texto
If Nz(Me.TxtLogin.Value, "") = "" Then
MsgBox "Seleccione un nombre de usuario de la lista para acceder", vbInformation, "ATENCION"
Me.TxtLogin.SetFocus
ElseIf Nz(Me.TxtPassword.Value, "") = "" Then
MsgBox "Introduzca la contraseña del usuario seleccionado", vbInformation, "ATENCION"
Me.TxtPassword.SetFocus
Else
If Nz(DLookup("Password", "Usuarios", "Id_usuario=" & Me![TxtLogin]), "") <> "" Then
auxContraseña = DLookup("Password", "Usuarios", "Id_usuario=" & Me![TxtLogin])
End If
If auxContraseña <> Me.TxtPassword.Value Then
If NumIntentos > 1 Then
NumIntentos = NumIntentos - 1
MsgBox "La contraseña introducida es incorrecta" & vbCrLf & _
"Le quedan " & NumIntentos & " intentos" & vbCrLf & vbCrLf & _
"Por favor, introduzca otra", vbExclamation, "INTRODUCCIÓN INCORRECTA"
Me.TxtPassword.Value = ""
Me.TxtPassword.SetFocus
Else
MsgBox "Ha superado el numero de intentos", vbCritical, "ADIOS..."
DoCmd.RunCommand acCmdCloseDatabase 'y cerramos el de acceso
End If
Else
Dim Acceso As Integer

Acceso = DLookup("Id_acceso", "Usuarios", "Id_usuario=" & Me![TxtLogin])
Resolucion = DLookup("Resoluciones=" & Me![TexResolucion])
Select Case Acceso

Case 1 'Es el id_acceso del Administrador

MsgBox "Has ingresado al sistema con permisos de Super-Administrador, por lo tanto tienes acceso a toda la informacion, apartados del sistema y ademas la creacion de cuentas de usuario", vbInformation, "INFORMACION"

DoCmd.OpenForm "Entorno de Super Administrador", acNormal, "", "", , acNormal

Select Case resolución

Case 1 '1920x1080

....

Case 2 '1600x900

....

End Select

'DoCmd.OpenForm stDocName, , , stLinkCriteria 'Abrimos el formulario correspondiente
DoCmd.Close acForm, Me.NAME 'y cerramos el de acceso
End If
End If
End Sub

Me podrías ayudar con la estructura correcta..

Y muchas gracias por todo

Por querer simplificar mi respuesta parece que no me he expresado bien... Verás, donde yo te puse "resolución" tu has se poner el nombre del cuadro combinado en el que eliges la resolución, y donde puse los puntos suspensivos, la instrucción para abrir el formulario correspondiente al usuario y resolución seleccionado:

'por aquí tu código

Select Case Acceso

Case 1 'Es el id_acceso del Administrador

MsgBox "Has ingresado al sistema con permisos de Super-Administrador, por lo tanto tienes acceso a toda la informacion, apartados del sistema y ademas la creacion de cuentas de usuario", vbInformation, "INFORMACION"

Select Case resolucion 

Case 1'1920x1080

DoCmd.OpenForm "Entorno de Super Administrador", acNormal, "", "", , acNormal

Case 2 '1600x900

DoCmd. OpenForm "Entorno de Super Administrador 1600x900", acNormal, "", "",, acNormal

Case 3 '1366x768

DoCmd. OpenForm "Entorno de Super Administrador 1366x768", acNormal, "", "",, acNormal

End Select 

Case 2 'Es el id_acceso del Usuario

'aqui repites el proceso para la resolución del usuario 2 y siguientes...

Demasiadas gracias te daré . la verdad que ha quedado muy bien

Hola amigo nuevamente quiero molestarte.resulta que surgió un problema que seria que al momento de ingresar al formulario solicitado no cierra el formulario de login.

Así me quedo el código con tus consejos:

Private Sub CmdEntrar_Click()
Dim auxContraseña As String
'Comprobamos que hay datos en las cajas de texto
If Nz(Me.TxtLogin.Value, "") = "" Then
MsgBox "Seleccione un nombre de usuario de la lista para acceder", vbInformation, "ATENCION"
Me.TxtLogin.SetFocus
ElseIf Nz(Me.TxtPassword.Value, "") = "" Then
MsgBox "Introduzca la contraseña del usuario seleccionado", vbInformation, "ATENCION"
Me.TxtPassword.SetFocus
Else
If Nz(DLookup("Password", "Usuarios", "Id_usuario=" & Me![TxtLogin]), "") <> "" Then
auxContraseña = DLookup("Password", "Usuarios", "Id_usuario=" & Me![TxtLogin])
End If
If auxContraseña <> Me.TxtPassword.Value Then
If NumIntentos > 1 Then
NumIntentos = NumIntentos - 1
MsgBox "La contraseña introducida es incorrecta" & vbCrLf & _
"Le quedan " & NumIntentos & " intentos" & vbCrLf & vbCrLf & _
"Por favor, introduzca otra", vbExclamation, "INTRODUCCIÓN INCORRECTA"
Me.TxtPassword.Value = ""
Me.TxtPassword.SetFocus
Else
MsgBox "Ha superado el numero de intentos", vbCritical, "ADIOS..."
DoCmd.RunCommand acCmdCloseDatabase 'y cerramos el de acceso
End If
Else
Dim Acceso As Integer

Acceso = DLookup("Id_acceso", "Usuarios", "Id_usuario=" & Me![TxtLogin])
Select Case Acceso

Case 1 'Es el id_acceso del Administrador

MsgBox "Has ingresado al sistema con permisos de Super-Administrador, por lo tanto tienes acceso a toda la informacion, apartados del sistema y ademas la creacion de cuentas de usuario", vbInformation, "INFORMACION"

Select Case TexResolucion

Case 1 '1920x1080

DoCmd.OpenForm "Entorno de Super Administrador", acNormal, "", "", , acNormal

Case 2 '1600x900

DoCmd.OpenForm "Entorno de Super Administrador 1600x900", acNormal, "", "", , acNormal

Case 3 '1366x768

DoCmd.OpenForm "Entorno de Super Administrador 1366x768", acNormal, "", "", , acNormal

End Select

Case 2 'Es el id_acceso del Usuario

MsgBox "Has ingresado al sistema con permisos de Administrador, por lo tanto tendras acceso a los apartados correspondientes otorgados por el Super-Administrador", vbInformation, "INFORMACION"

Select Case TexResolucion

Case 1 '1920x1080

DoCmd.OpenForm "Entorno de Administrador", acNormal, "", "", , acNormal

Case 2 '1600x900

DoCmd.OpenForm "Entorno de Administrador 1600x900", acNormal, "", "", , acNormal

Case 3 '1366x768

DoCmd.OpenForm "Entorno de Administrador 1366x768", acNormal, "", "", , acNormal

End Select

Case 3 'Es el id_acceso del Usuario Facturacion

MsgBox "Has ingresado al sistema con permisos de Digitador, por lo tanto tendras acceso a los apartados correspondientes otorgados por el Super-Administrador", vbInformation, "INFORMACION"

Select Case TexResolucion

Case 1 '1920x1080

DoCmd.OpenForm "Entorno de Usuario2", acNormal, "", "", , acNormal

Case 2 '1600x900

DoCmd.OpenForm "Entorno de Usuario2 1600x900", acNormal, "", "", , acNormal

Case 3 '1366x768

DoCmd.OpenForm "Entorno de Usuario2 1366x768", acNormal, "", "", , acNormal

End Select

Case 4 'Es el id_acceso del Usuario Facturacion

MsgBox "Has ingresado al sistema con permisos de Visita, por lo tanto tendras acceso a los apartados correspondientes otorgados por el Super-Administrador", vbInformation, "INFORMACION"

Select Case TexResolucion

Case 1 '1920x1080

DoCmd.OpenForm "Entorno de Usuario3", acNormal, "", "", , acNormal

Case 2 '1600x900

DoCmd.OpenForm "Entorno de Usuario3 1600x900", acNormal, "", "", , acNormal

Case 3 '1366x768

DoCmd.OpenForm "Entorno de Usuario3 1366x768", acNormal, "", "", , acNormal

End Select


Case 5 'Es el id_acceso del Usuario Facturacion

MsgBox "Este usuario actualmente se encuentra en labores de mantencion, por lo tanto se debera esperar a que el Super-Administrador libere el Entorno para trabajar de forma normal", vbInformation, "INFORMACION"

Select Case TexResolucion

Case 1 '1920x1080

DoCmd.OpenForm "Entorno de Mantenimiento", acNormal, "", "", , acNormal

Case 2 '1600x900

DoCmd.OpenForm "Entorno de Mantenimiento", acNormal, "", "", , acNormal

Case 3 '1366x768

DoCmd.OpenForm "Entorno de Mantenimiento", acNormal, "", "", , acNormal

End Select

'DoCmd.OpenForm stDocName, , , stLinkCriteria 'Abrimos el formulario correspondiente
DoCmd.Close acForm, Me.NAME 'y cerramos el de acceso
End Select
End If
End If
End Sub

Es difícil seguir el código en la respuesta, pero si tal como lo tienes ahora no te funciona, es porque lo tienes metido dentro del bloque If.. Then que no corresponde.

La solucioón más sencilla es poner la línea:

DoCmd. Close acForm, Me. NAME 'y cerramos el de acceso

Después de la que abre cada formulario (DoCmd. OpenForm ...) Así te aseguras que siempre se cierra

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas