Problema con propiedades de algunos objetos en un formulario Access

Llevo varios días trabajando en una aplicación Access para el control de varias actividades. Y he llegado a un punto en el que no puedo avanzar.

Hay un formulario de login al entrar en la página con la siguiente estructura:

Al apretar el botón Enter corre el siguiente código (esta escrita en un modulo distinto para poder guardar la variable "category" para futuros usos):

Public category as string
Public Sub Category_User()
 Dim pass As String
    If Nz(Form_Login.TxtUser, "") = "" Then
            MsgBox "User Field empty, please, enter USER", vbInformation, "USER"
            Form_Login.TxtUser.SetFocus 
        ElseIf Nz(Form_Login.TxtPASSWORD, "") = "" Then
            MsgBox "Password Field empty, please, enter PASSWORD", vbInformation, "PASSWORD"
            Form_Login.TxtPASSWORD.SetFocus 
        Else
        ' Encontrar la contraseña en la tabla USERS
            If Nz(DLookup("[Password]", "[Users]", "USER='" & Form_Login![TxtUser] &"'"), "") <> "" Then
            pass = DLookup("Password", "Users", "USER='" & Form_Login![TxtUser] &"'")
    End If
'Comprobamos que la contraseña sea valida
    If pass <> Form_Login.TxtPASSWORD Then
            MsgBox "Wrong Password, try again", vbCritical, "OK"
        Else
        category = DLookup("[Category]", "[Users]", "User='" & Form_Login![TxtUser] & "'")
        MsgBox (category)
        If category = 1 Then
            Call Button_Enabled
        ElseIf category = 2 Then
            Call Button_Enabled
        Else
            Call Button_Disabled
        End If
        DoCmd.OpenForm "Excursions"
End Sub

Las rutinas Button_Enabled y Button_Disabled tienen el siguiente codigo:

Public Sub Button_Enabled()
        Form_Escape_in_Blue_Wednesday.Button_Add_Comment.Enabled = True
        Form_Escape_in_Blue_Wednesday.Button_Block.Enabled = True
        Form_Escape_in_Blue_Wednesday.Button_Unblock.Enabled = True
End Sub
_____________________________________________________________
Public Sub Button_Disabled()
        Form_Escape_in_Blue_Wednesday.Button_Add_Comment.Enabled = False
        Form_Escape_in_Blue_Wednesday.Button_Block.Enabled = False
        Form_Escape_in_Blue_Wednesday.Button_Unblock.Enabled = False
End Sub

Esto funciona a la perfeccion. Se me abre el formulario "Excursions" y todo parece funcionar de maravilla. Pero desde este mismo formulario "Excursions" accedo al formulario "Escape_in_Blue_Wednesday" apretando un boton

Public Sub Open_Wednesday()
DoCmd.OpenForm "escape_in_blue_wednesday"
End Sub

 Y El problema es que cuando abro el formulario "Escape_in_Blue_Wednesday" con dicho boton, parece que no se aplican los cambios que habia pedido en el Sub Category_User. Pero cierro el formulario, lo vuelvo abrir con el mismo boton y funciona. Parece que no funciona solo la primera vez que abro el formulario.

Incluso he aplicado otra rutina manteniendo la variable "category" para que al abrir el formulario "escape_in_blue_wednesday" vuelva a comprobar el valor de dicha variable, y dependiendo de cual sea el valor habilite o deshabilite ciertos botones del formulario, y más de lo mismo. Ninguno de los botones de dicho formulario cambia con la primera apertura. Siempre tengo que cerrar el formulario, volverlo a abrir y entonces funciona a la perfección.

No considero lo opción de crear una macro que abra, cierre y vuelva a abrir el formulario. No lo he probado, pero no es una solución.

He probado con el Macro builder y más de lo mismo. He puesto msgbox en el código para saber que mantiene las variables y todo va bien. El único problema es que tengo que cerrar y volver a abrir el formulario y no entiendo por que.

¿Alguna idea?

1 Respuesta

Respuesta
1

Sergio: Si tu dices que el código del Procedimiento>> Sub Category_User() te funciona con las líneas que has puesto, he de creerte, pero por más que lo miro, me siguen faltando dos cierres de Bucle.

Dicho ésto tampoco veo esos procedimientos intermedios de Activar y Desactivar botones.

Que haría yo, que no quiere decir que sea lo mejor, ni lo único.

Public Category As Byte
Public Sub Category_User()
Dim Pass As String
If Nz(Form_Login.TxtUser, "") = "" Then
    MsgBox "User Field empty, please, enter USER", vbInformation, "USER"
    Form_Login.TxtUser.SetFocus 
ElseIf Nz(Form_Login.TxtPASSWORD, "") = "" Then
    MsgBox "Password Field empty, please, enter PASSWORD", vbInformation, "PASSWORD"
    Form_Login.TxtPASSWORD.SetFocus 
Else
    'Encontrar la contraseña en la tabla USERS
    If Nz(DLookup("[Password]", "[Users]", "USER='" & Form_Login![TxtUser] &"'"), "") <> "" Then
        Pass = DLookup("Password", "Users", "USER='" & Form_Login![TxtUser] &"'")
    End If
    'Comprobamos que la contraseña sea valida
    If Pass <> Form_Login.TxtPASSWORD Then
        MsgBox "Wrong Password, try again", vbCritical, "OK"
    Else
        Category = DLookup("[Category]", "[Users]", "User='" & Form_Login![TxtUser] & "'")
        DoCmd.OpenForm "Excursions"
    End If
End If
End Sub

Aquí ya tendrás el Valor de Category.

En el Form_Load de  >> escape_in_blue_wednesday

Private Sub Form_Load()
If Category = 1 Or Category = 2 Then
      Me.Button_Add_Comment.Enabled = True
      Me.Button_Block.Enabled = True
      Me.Button_Ublock.Enabled = True
Else
      Me.Button_Add_Comment.Enabled = False
      Me.Button_Block.Enabled = False
      Me.Button_Ublock.Enabled = False
End If
End Sub

Ya me contarás. Mis saludos >> Jacinto

¡Gracias Jacinto!

La verdad es que cuando he leído tu respuesta me ha dado vergüenza de mi mismo... antes lo tenía cómo tú dices (a excepción de que "category" la tenía string), el problema es que la variable no era pública y no me la reconocía, así que cambié mil cosas, y al final se me olvidó probar lo más sencillo. Me doy cuenta de que a veces es mejor parar, descansar, y volver a empezar...

Por otro lado tienes razón sobre el procedimiento Sub Category-user, lo que pasa es que al copiar el código borré varias líneas de comentarios para no hacerlo tan largo y que yo pareciera más tonto... pero los end if están ahí.

Mil gracias! Mañana lo pruebo y te digo.

Sergio: No te preocupes que esas cosas nos ocurren a todos de tanto en tanto.

Mis saludos >> Jacinto

¡Gracias Jacinto!

Funciona a la perfección! Ahora voy a colgar otra dudilla que tengo... Esta me parece que va a ser algo más complicada. Pero mil gracias!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas