Cómo mostrar usuario que ingreso?

En este momento tengo un formulario con un subformulario, en este subformulario se van mostrando diferentes formularios, dependiendo de lo que quiero ver.

Por ejemplo tengo un botón "Ingresar" al darle click me muestra en el subformulario que debo ingresar el usuario y contraseña.

Luego el usuario digitado (en el subformulario)me lo muestra en un cuadro de texto del Formulario utilizando en el origen del control lo siguiente =[subformulario].[Formulario]![cboUser]

Hasta aquí todo funciona bien, el problema que tengo es cuando cambio de subformulario, el usuario se cambia por #Error.

Captura al cambiar de "subformulario"

Y me gustaría que el usuario con el que se ingreso se quede en el cuadro de texto del formulario sin importar el subformulario que se este mostrando.

2 Respuestas

Respuesta
2

De entre varias maneras de hacerlo, como por ejemplo declara una Variable Publica y al entrar el usuario darle ese valoe y rescatalo desde y cuando quieres.

Te sugiero que le des una ojeada a éste ejemplo de Neckkito que usa un Formulario oculto y que a mi me parece bueno.

http://neckkito.xyz/nck/index.php/ejemplos/13-formularios/55-formulario-chivato 

Un saludo >> Jacinto

Gracias por el ejemplo!!

No entiendo muy bien ese ejemplo porque le di ver todos los objetos de Access y lo único me muestra son formulario y el ejemplo se conecta a una tabla.

No soy experto en programación pero intentando entender el código trate de agregarle lo siguiente en el botón Abrir Fautorizado1:

public Sub cmdAbreFA1_Click()

    Dim vUser As Variant

    vUser = Forms!FChivato.txtUser.Value

    If vUser = "neckkito" Then

        DoCmd.OpenForm "FAutorizado1"

         vUser = txt_usuario_logeado

    Else

        MsgBox "No está autorizado para acceder a este formulario", vbInformation, "AVISO"

    End If

End Sub

Intentaba decirle que en txt_usuario_logeado me muestre el usuario, pero me da el siguiente error

la verdad no se como rescatar el valor de esa variable y mostrarlo en mi cuadro de texto. si me pudieras ayudar te lo agradezco

Ógicamente te da un ERROR, porque Access no sabe que es >>

Txt_usuario_logeado

En mi opinión debes entender primero el Tipo de variables, su alcance ...

Si no tienes una base mínima dificilmente vas a poder adelantar.

Mira éste enlace:

https://docs.microsoft.com/es-es/office/vba/language/concepts/getting-started/declaring-variables 

El hecho de que en el Ejemplo veas "solo" Formularios y el ejemplo se "conecta" a una Tabla, en realidad cada Objeto tiene su función y hay una parte del Código que usa la Tabla para validar al usuario que se escribe.

Private Sub cmdAceptar_Click()
'Declaración de 3 Variables
Dim vUser As Variant
Dim vPass, vTPass As Variant
'Adjudica valor a 2 de ellas
vUser = Me.cboUser.Value
vPass = Me.txtPass.Value
'Sondea si el Combo de Usuario es Nulo y si lo es lanza mensaje y sale del Procedimiento  
If IsNull(vUser) Then
        MsgBox "No ha seleccionado ningún usuario", vbInformation, "AVISO"
        Me.cboUser.SetFocus
        Exit Sub
End If
'Idem para el Password    
If IsNull(vPass) Then
        MsgBox "No ha introducido ninguna contraseña", vbInformation, "AVISO"
        Me.txtPass.SetFocus
        Exit Sub
End If
'Si ha pasado los dos sondeos anteriores, busca el valor de la 3ª variable en el Campo Pass, de la Tabla TPass con la condición de que el NombUser Sea el de VUser    
vTPass = DLookup("[Pass]", "TPass", "[NomUser] = '" & vUser & "'")
'Sondea ahora si hay coincidencia. Si la hay >> Abre el FChivato  (Oculto). Le pasa el valor de VUser al cuadro de Texto txtUser
If vTPass = vPass Then
        DoCmd.OpenForm "FChivato", , , , , acHidden
        Forms!FChivato.txtUser.Value = vUser
        'Abre el Formulario Principal FMenu
        DoCmd.OpenForm "FMenu"
        'Cierra el FPass
        DoCmd.Close acForm, Me.Name
Else    'Si no hay coincidencia, Mensaje y salida. Para otro Intento
        MsgBox "La contraseña introducida no es correcta", vbInformation, "AVISO"
        Me.txtPass.Value = Null
        Me.txtPass.SetFocus
End If
End Sub

Un saludo >> Jacinto

Respuesta
2

Otra forma. Te digo lo que haría. Crearía una tabla Registro con Usuario, Dia y hora.

En el mismo formulario que validas si el usuario y la Password son correctas, el caso de que si acertara le pondría, aparte de lo que hayas puesto

docmd.setwarnings false

Docmd.runsql"insert into registro(usuario,dia,hora)values('" & me.usuario & "',date(),Time())"

Entonces, en cualquier lugar, sin preocuparte de nada basta conque pongas, o bien el origen de datos de un control

=dlast("usuario";"registro") o bien en código

texto X = dlast("usuario","registro")

Además esa tabla te sirve para saber quien entró el día y la hora por si tienes que pegarle por estropear algo.

¡Gracias! con tu sugerencia ahora mi Access cuenta con una bitácora de accesos, que no lo había pensado y me parece muy importante.

No conocía la función dlast, investigue un poco y me parece me fácil de entender., ya se la implemente a mi Access y funciona como deseaba .

Primero, tienes las funciones Dlast(el último que entró, muy buena porque si hay alguno que te diga esto no funciona, ya sabes quien ha sido el cabr... que la ha estropeado por tocar lo que no debía y así puedas ajusticiarlo, pero que parezca un accidente)

Dfirst( el primero que entró, para darle un premio por atreverse a entrar)

Dcount(para saber cuantos han entrado en un lapso de tiempo

Dsum( para sumar las veces que uno entró y sospechar de él)

Segundo. En el formulario ese que tienes para validar yo pondría la instrucción antes del código que tienes puesto. Esto tiene la ventaja de que guarda el usuario que quiso entrar y no sabía la clave, para ajusticiarlo también, pero que siga pareciendo un accidente)

De todas formas yo le daría tres oportunidades(es sencillo hacerlo) para que acierte con el usuario y la clave y si a la tercera no acierta que un rayo láser que salga de la pantalla lo deje calvo o se cierre todo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas