Modifica nuevamente Login de access o inicio de login con selección automática de formularios según la resolución del sistema

Quiero volver a realizar un cambio en mi login, ya que, lo he vuelto a modificar con el siguiente código, el cual me he conseguido y quiero adaptarlo a mis necesidades.

En fin deseo que el login también abra el formulario deseado si el usuario decide entre las resoluciones disponibles el la lista desplegable. Según muestro en la imagen a continuación.

También me gustaría en realidad que esto fuera automático y sin la interversion del usuario me refiero a que yo poseo los 3 formularios, osea con el principal que esta puesto en el codigo (Entorno_Principal) el cual esta diseñado para una resolución de 1920x1080p pero también cuento con los otros dos 1600x900 y 1360x768. Dicho esto quisiera que al ingresar mediante el login la base de datos reconociera la resolución del sistema y eligiera la mas cercana dentro de los tres formularios que mencione anteriormente.

Private Sub CmdEntrar_Click()
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.txtPass.SetFocus
Else
If (IsNull(DLookup("[login]", "Usuarios", "[login] ='" & Me.txtUsuario.Value & _
"' And Password = '" & Me.txtPass.Value & "'"))) Then
MsgBox "Usuario y/o Contraseña incorrectos"
Else
UserLevel = DLookup("Admin", "Usuarios", "login = '" & Me.txtUsuario.Value & "'")
If UserLevel = -1 Then
LogedUser = Me.txtUsuario.Value
DoCmd.Close
DoCmd.OpenForm "Entorno_Principal"
Else
LogedUser = Me.txtUsuario.Value
DoCmd.Close
DoCmd.OpenForm "Entorno_Principal"
End If
End If
End If
End Sub

1 Respuesta

Respuesta
1

Con esta función, consigues saber la resolución del monitor:

Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long 
Const SM_CXSCREEN = 0 'X Size of screen 
Const SM_CYSCREEN = 1 'Y Size of Screen 
Private Sub Form_Load() 
MsgBox "Resolucion " & _ 
Str$(GetSystemMetrics(SM_CXSCREEN)) & "x" & Str$(GetSystemMetrics(SM_CYSCREEN)) 
End Sub 

https://www.lawebdelprogramador.com/foros/Access/1176685-resolucion-access.html 

Te devolverá una cadena de texto del estilo "1920x1080", "1200x800"...

Sabiendo eso, ya puedes integrarlo en tu código como creas conveniente.

Un saludo.


     bit.ly/ForoNkSv 

Hola amigo gracias por tu pronta respuesta pero como sabrás no me manejo para nada en código vba y bueno para no complicar las cosas me gustaría que el código que he dejado arriba le agregues la opción de que si se selecciona una resolución en la lista desplegables de la resoluciones y habrá el formulario correspondiente.

Los formularios serian los siguiente

Entorno_Principal que corresponde a 1920x1080p, Entorno_Principal1 que corresponde a 1600x900p y por ultimo Entorno_Principal2 que corresponde a 1360x768p

bueno acá el código de nuevo:

Private Sub CmdEntrar_Click()
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.txtPass.SetFocus
Else
If (IsNull(DLookup("[login]", "Usuarios", "[login] ='" & Me.txtUsuario.Value & _
"' And Password = '" & Me.txtPass.Value & "'"))) Then
MsgBox "Usuario y/o Contraseña incorrectos"
Else
UserLevel = DLookup("Admin", "Usuarios", "login = '" & Me.txtUsuario.Value & "'")
If UserLevel = -1 Then
LogedUser = Me.txtUsuario.Value
DoCmd.Close
DoCmd.OpenForm "Entorno_Principal"
Else
LogedUser = Me.txtUsuario.Value
DoCmd.Close
DoCmd.OpenForm "Entorno_Principal"
End If
End If
End If
End Sub

Lo que quieres ya te lo respondí en otra pregunta (¿Mejora Cuentas de Usuario Access? ), y no lo voy a volver a repetir... XD

Si la verdad es que ya me has contestado esta pregunta y me ha fusionando de maravilla, pero el código que deseo utilizar es completamente distinto.. el cual me permite trabajar con privilegios de manera más eficiente. Y bueno yo la verdad con mi poco conocimiento he reducido el montón de formularios principales con distintos privilegios a tan solo tres, que son los que corresponden a las distintas resoluciones. Y de verdad he intentado todo como para implementar lo del código anterior al actual y no me da nada de resultados. Soy nulo en esto

Independientemente del número de formularios principales que tengas, si a cada tipo de acceso le puede corresponder uno u otro en función de la resolución, has de hacer lo mismo que en la otra respuesta que te di: poner un select case (o varios Ifs) y contemplar las posibles resoluciones para abrir cada formulario. Tendrás que poner tantos como tipos de usuarios distintos tengas.

Sorry por ser tan majadero y tonto pero me arroja error  else sin if

Private Sub CmdEntrar_Click()
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.txtPass.SetFocus
Else
If (IsNull(DLookup("[login]", "Usuarios", "[login] ='" & Me.txtUsuario.Value & _
"' And Password = '" & Me.txtPass.Value & "'"))) Then
MsgBox "Usuario y/o Contraseña incorrectos"
Else
UserLevel = DLookup("Admin", "Usuarios", "login = '" & Me.txtUsuario.Value & "'")
If UserLevel = -1 Then
LogedUser = Me.txtUsuario.Value
DoCmd.Close
DoCmd.OpenForm "Entorno_Principal"
Else
LogedUser = Me.txtUsuario.Value
DoCmd.Close
DoCmd.OpenForm "Entorno_Principal"
End If
Else
Dim Acceso As Integer

Acceso = DLookup("Login", "Usuarios", "Login=" & Me![txtUsuario])

Select Case Acceso

Case 1 'Es el id_acceso del Super Administrador

MsgBox "Has ingresado al sistema con permisos de Super-Administrador, por lo tanto tienes acceso a toda la información, apartados del sistema y ademas la creación de cuentas de usuario", vbInformation, "INFORMACION"
Select Case TexResolucion

Case 1 '1920x1080p

DoCmd.OpenForm "Entorno_Principal", acNormal, "", "", , acNormal
DoCmd.Close acForm, Me.NAME '
Case 2 '1600x900p

DoCmd.OpenForm "Entorno_Principal 1600x900", acNormal, "", "", , acNormal
DoCmd.Close acForm, Me.NAME '
Case 3 '1366x768p

DoCmd.OpenForm "Entorno_Principal 1366x768", acNormal, "", "", , acNormal
DoCmd.Close acForm, Me.NAME '
End Select
End If
End If
End If
End Sub

Pues revisa que no hayas cerrado con End If todos los Ifs antes de poner el Else en el que te marca el error... 

no funciona nada el código no toma las resoluciones que le pido

Decirme: "no funciona nada el código no toma las resoluciones que le pido" no me da ninguna pista de qué te puede estar fallando, únicamente que algo no haces bien... No dices qué código usas, si te da error o no, de dónde coges los valores para las variables...

Si yo te digo: " mi coche no arranca, ayúdame", ¿a qué no sabrías por dónde empezar?.

Mirando por encima el código que te daba error en el else, aparte de que te faltan "If" o sobran "End If" o cambiar algún "Else" por "ElseIf", y te falta un "End Select", los select case para manejar la resolución los tienes que poner con el acceso de usuario (de nuevo, tal como te expliqué en la otra respuesta), no al final del todo donde el código nunca llegará...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas