Acceder a access con usuarios definidos a un formulario especifico según su grupo.

Bueno hace unos meses estoy desarrollando una aplicación en Access 2007 muy buena que me facilita cada vez mas mi trabajo, ya estoy en la etapa final y como cierre quiero parametrizar el acceso de los usuarios según sus funciones al sistema, con Access 2003 esto hera muy facil un asistente te permitia crear los usuarios y sus respectivos permisos, como esta version no tiene esto he quedado desarmado para continuar con mi proyecto; en si lo que nesecito es que el usuario xxxxx se identifique en un formalario con su respectiva contraseña y al autenticarlo este sea enviado a un formulario especifico para el grupo al cual pertenece. Encontre un codigo muy bueno que hace parte de lo que necesito pero solo con dos grupos no se como crearle una tercera categoria el codigo es el siguiente:

Option Compare Database
Option Explicit
Dim NumIntentos As Integer
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("Clave", "Usuarios", "Id_usuario=" & Me![TxtLogin]), "") <> "" Then
auxContraseña = DLookup("Clave", "Usuarios", "Id_usuario=" & Me![TxtLogin])
End If
If auxContraseña <> Me.TxtPassword.Value Then
If NumIntentos = 10 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.Close acForm, Me.Name 'y cerramos el de acceso
End If
Else
If DLookup("Id_acceso", "Usuarios", "Id_usuario=" & Me![TxtLogin]) = 1 Then
MsgBox "Ha entrado como usuario administrador", vbInformation, "BIENVENIDO AL APLICATIVO"
Call Admin
Else
MsgBox "Ha entrado como usuario final", vbInformation, "BIENVENIDO AL APLICATIVO"
Call Usuar
End If
'DoCmd.OpenForm stDocName, , , stLinkCriteria 'Abrimos el formulario correspondiente
DoCmd.Close acForm, Me.Name 'y cerramos el de acceso
End If
End If
End Sub

Function Admin()
On Error GoTo Admin_Err
DoCmd.OpenForm "FormProcesos", acNormal, "", "", , acNormal
Admin_Exit:
Exit Function
Admin_Err:
MsgBox Error$
Resume Admin_Exit
End Function

Function Usuar()
On Error GoTo Usuar_Err
DoCmd.OpenForm "FormUsuarios", acNormal, "", "", , acNormal
Usuar_Exit:
Exit Function
Usuar_Err:
MsgBox Error$
Resume Usuar_Exit
End Function

Los grupos Serian:

Admins abriria el formulario FormParametros

Precontractual abriria el formulario FormProcesos

Facturadores abriria el formulario FormContratos

La intencion es que el grupo sea el que determine el formulario que los usuarios pertenecientes a este podran visualizar.

Gracias, le agradeceria al experto que me pueda ayudar solo me falta esto para colocar la base de datos en pruba general.

1 respuesta

Respuesta
1

Por lo que parece el código te marca el tipo de grupo a través del campo Id_acceso. Si el Id_acceso es 1 es que es administrador, y si es usuario final.

Vamos a suponer que si
Id_acceso = 1 -> es administrador

Id_acceso = 2 -> es precontractual

Y el resto es Facturadores.

Lo que tienes que hacer es analizar precisamente qué valor te devuelve ese Id_acceso del usuario que entra en la BD. Para ello, en lugar del bloque If...End if del código que has apuntado, necesitamos utilizar un bloque SELECT CASE.

Te reescribo el código, marcándote en negrita los cambios:

...

Option Compare Database
Option Explicit

Dim NumIntentos As Integer
Dim grupoAcceso as byte
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, "ATENCIÓN"
Me.TxtLogin.SetFocus
ElseIf Nz(Me.TxtPassword.Value, "") = "" Then
MsgBox "Introduzca la contraseña del usuario seleccionado", vbInformation, "ATENCIÓN"
Me.TxtPassword.SetFocus
Else
If Nz(DLookup("Clave", "Usuarios", "Id_usuario=" & Me![TxtLogin]), "") <> "" Then
auxContraseña = DLookup("Clave", "Usuarios", "Id_usuario=" & Me![TxtLogin])
End If
If auxContraseña <> Me.TxtPassword.Value Then
If NumIntentos = 10 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, "ADIÓS..."
DoCmd.Close acForm, Me.Name 'y cerramos el de acceso
End If
Else
grupoAcceso = DLookup("Id_acceso", "Usuarios", "Id_usuario=" & Me![TxtLogin]) = 1
Select Case grupoAcceso
Case 1
MsgBox "Ha entrado como usuario administrador", vbInformation, "BIENVENIDO AL APLICATIVO"
Call Admin
Case 2
MsgBox "Ha entrado como usuario precontractual", vbInformation, "BIENVENIDO AL APLICATIVO"
Call Precontr
Case Else
MsgBox "Ha entrado como usuario facturador", vbInformation, "BIENVENIDO AL APLICATIVO"
Call Factur
End Select
End If
'DoCmd.OpenForm stDocName, , , stLinkCriteria 'Abrimos el formulario correspondiente
DoCmd.Close acForm, Me.Name 'y cerramos el de acceso
End If
End Sub
Function Admin()
On Error GoTo Admin_Err
DoCmd.OpenForm "FormParametros", acNormal, "", "", , acNormal
Admin_Exit:
Exit Function
Admin_Err:
MsgBox Error$
Resume Admin_Exit
End Function
Function Precontr()
On Error GoTo Precontr_Err
DoCmd.OpenForm "FormProcesos", acNormal, "", "", , acNormal
Precontr_Exit:
Exit Function
Precontr_Err:
MsgBox Error$
Resume Precontr_Exit
End Function
Function Factur()
On Error GoTo Factur_Err
DoCmd.OpenForm "FormContratos", acNormal, "", "", , acNormal
Factur_Exit:
Exit Function
Factur_Err:
MsgBox Error$
Resume Factur_Exit
End Function

...

Sin poder testearlo es difícil saber si te saltará algún error, pero cruzaremos los dedos... ;)

Ya me dirás,

Buen día, le comento que algo no esta bien en código solo esta evaluando la función

Function Factur()
On Error GoTo Factur_Err
DoCmd.OpenForm "FormContratos", acNormal, "", "", , acNormal
Factur_Exit:
Exit Function
Factur_Err:
MsgBox Error$
Resume Factur_Exit
End Function

Y todos los usuarios ingresan a la misma función por ende al mismo formulario.....? no se de que manera le puedo enviar la base de datos para que usted mismo la pueda testear y así identificar el problema.

Comprime la BD en zip o rar y cuélgala en <a>http://www.filebig.net/</a>

Después me pasas en enlace de descarga en respuesta a este mensaje.

Puedes eliminar los datos de las tablas si lo consideras conveniente, pero al menos déjame tres usuarios (aunque con datos inventados si quieres), uno de cada clase.

Hola, listo te adjunto los enlaces que me arrojo la pagina, el archivo tiene las tablas, relaciones y formularios necesarios para desarrollar el ejercicio.... Gracias nuevamente por su asesoría.

http://www.filebig.net/files/rjLKTPXDTR

http://www.filebig.net/files/rjLKTPXDTR

<b><a href="http://www.filebig.net/files/rjLKTPXDTR">http://www.filebig.net/files/rjLKTPXDTR</a></b>

http://www.filebig.net/del.php?rjLKTPXDTRA7gZuL2hgd

ok. Gracias

He estado echando un vistazo a la BD y te comento un par de cosas:

- El sistema de intentos que intentabas usar no te funcionará del todo bien. Te lo he cambiado ligeramente.

- Verás que, relacionado con lo anterior, se produce una superposición de mensajes. El problema que tengo es que tu código es un código totalmente anidado, sin utilizar bloques independientes de código. Para arreglarlo tendría que reformarte bastante el código. Prefiero no tocar los códigos de los demás más que lo imprescindible, por lo que la solución que al final he adoptado, salvo por el pequeño inconveniente que te mencionaba antes, creo que es la mejor.

- Había algunas cosas mal programadas en el código (que digamos sólo podían verse con la BD "en ejecución". Es por ello por lo que verás algunas líneas adicionales que antes no estaban pero que son necesarias para evitar que te salten errores.

Como el código es bastante largo no te lo pego aquí. Basta que te bajes la BD revisada en este link (http://www.filebig.net/files/K6Jnad6qkW) y saques el código del botón para ingresar.

Espero que sea lo que pedías. Si tienes alguna duda me comentas.

Excelente muchas gracias por tu valiosa ayuda, tengo a un problemas con el codigo de los intentos pero lo principal que es la autenticacion de cada usuario esta perfecto.....

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas