Mostrar nombre de usuario logueado en formulario de Access

Tengo una base de datos, es un punto de ventas, el motivo de mi consulta es para llamar el nombre de la persona que inicio sesión y el puesto que tiene, he logrado llamar el puesto que tiene, pero aun no he conseguido llamar el nombre completo de la persona.

Este es el diseño de mi tabla de usuarios y la vista de hoja de datos

Tengo un Formulario al que tengo por nombre Acceso, en el cual se loguea la persona que manipulara el sistema, el cual tiene un botón llamado CmdAceptar, al hacer clic tiene el siguiente evento:

Private Sub cmdAceptar_Click()
On Error GoTo err:

'variable local para nombre y clave de usuario
Dim NOMUSU As String
Dim CVEUSU As String

'Asignar el valor de los controles a las variables locales
NOMUSU = UCase(Nz(Me.TxtNombre_Usuario.Value, ""))
CVEUSU = UCase(Nz(Me.TxtCLAVE_USUARIO.Value, ""))

If IsEmpty(NOMUSU) Or IsEmpty(CVEUSU) Then
MsgBox "Datos Incompletos...", vbOKOnly + vbCritical, "Imposible Ingresar!!"
Else
'Buscar Usuario con los datos ingresados
If ExisteUsuario(NOMUSU, CVEUSU) = True Then
MsgBox "Bienvenido al Sistema", vbOKOnly + vbInformation, "Acceso Exitoso"
DoCmd.Close 'Cerrar ventana de Acceso
'Codigo para entrar al sistema
Application.DoCmd.RunCommand acCmdAppMaximize
DoCmd.OpenForm "VENTAS_m", acNormal
Else
NumIntento = NumIntento + 1
If NumIntento <= 2 Then
MsgBox "Usuario o Clave incorrecta", vbCritical + vbOKOnly, "Acceso Denegado"
Me.TxtNombre_Usuario.Value = ""
Me.TxtCLAVE_USUARIO.Value = ""
Me.TxtNombre_Usuario.SetFocus
Else
MsgBox "Demasiados Intentos, el Sistema se cerrara!", vbCritical + vbOKOnly, "Fallas de Acceso"
DoCmd.Quit
End If
End If
End If

Exit Sub
err:
MsgBox err.Description
End Sub

Este Formulario Acceso se lleva de la mano con un modulo llamado Sesión, dicho modulo tiene el siguiente código:

Option Compare Database
Option Explicit

'VARIABLES DE SESION
'SE NOMBRARAN IGUAL TAL COMO EN EL DISEÑO DE LAS TABLAS, PERO CON EL PREFIJO "x"
'PARA IDENTIFICARLAS COMO VARIABLES DE SESION

'----------- DATOS DE USUARIO-----------
Public xNOMBRE_USUARIO As String
Public xCLAVE_USUARIO As String
Public xNOMBRE As String
Public xAPELLIDO_MATERNO As String
Public xAPELLIDO_PATERNO As String
Public xVENTAS As Boolean
Public xADMINISTRAR As Boolean
Public xREPORTES As Boolean
Public xCATALOGOS As Boolean
Public xCONSULTAS As Boolean
Public xCANCELAR_VENTA As Boolean
Public xFACTURAS As Boolean
Public xINVENTARIOS As Boolean
'---------------------------------------
Public NumIntento As Byte

Public Function usuarioActivo() As String
usuarioActivo = xNOMBRE_USUARIO
End Function

Al terminar todoeste proceso se abre un ultimo formulario al que llamo Ventas, en este formulario es donde quiero el nombre del usuario y el puesto que tiene, dicho formulario tiene como evento al cargar el siguiente código:

Private Sub Form_Load()
Me.lblFecVta.Caption = Date
Me.lblHRVta.Caption = Time
Form!TxtPuesto.Value = xNOMBRE_USUARIO
End Sub

El Form!TxtPuesto.Value = xNOMBRE_USUARIO solo llama el puesto que tiene el usuario en un cuadro de texto llamado TxtPuesto, lo que me falta es que llamar el nombre completo del usuario que ingreso al sistema en otro cuadro de texto o ¿ abra forma de llamarlo en el mismo cuadro de texto TxtPuesto? De no ser asi mi idea es llamar el nombre en otro cuadro de texto.

Les escribiré como quisiera que se muestre el nombre del usuario logueado

TxtPuesto: Admin TxtNombre: Marvin Israel Gongora Caamal(esto practicamente se tomara de la tabla de usuarios). Pero no se como realizar este proceso.

Disculpen si escribí mucho, soy nuevo en esto de la programación y aun voy aprendiendo, hay ocasiones en que ya no se que hacer, como en esta ocasión.

Espero y exista alguien que me pueda ayudar en este Problema

Respuesta

Supongamos que tengo la tabla Clientes, y como no tengo el nombre del cliente separado en Nombre Y Apellidos, voy a usar Ciudad y Pais.

Tengo el formulario de loging, y abajo te va a mostrar la unión Nombre y Apellido, acuérdate que lo hago con Ciudad y Pais.

La contraseña la dejo a la vista. Al pulsar validar

En este caso, en el evento al hacer clic del botón le pongo

Private Sub Comando2_Click()
Usuario = DLookup("ciudad", "clientes", "clave='" & Me.Contraseña & "'") & ", " & DLookup("pais", "clientes", "clave='" & Me.Contraseña & "'")
Cargo = DLookup("cargocontacto", "clientes", "clave='" & Me.Contraseña & "'")
End Sub

Lo que importa es como localiza y une los campos ciudad y pais de esa clave.

Para concatenar nombres

Cuando pulso Enter

En este caso en particular le digo

Private Sub Ctl2Apel_AfterUpdate()
Resultado = Nombre & " " & [1apel] & " " & [2apel]
End Sub

1 respuesta más de otro experto

Respuesta

Sin entrar a analizar el proceso publicado, creo que el enfoque no es el optimo.

La ficha personal del usuario no creo que tenga importancia a la hora de vender un libro y si se desea acceder a los datos personales (y se dispone de autoridad para ello) lo puede hacer en base a su ID (que se da por supuesto: es único en ese conjunto).

Lo único que hay que mantener a lo largo de la sesión es el ID del usuario + sus permisos y apurando: el ID basta.

(Los tipos permisos pueden estar en una tabla de solo lectura e incluso publica ya que estarán relacionados con las diferentes áreas de trabajo y las actividades individuales que desempeñan).

Una vez que el usuario ingrese en la base (su nombre-usuario + contraseña = ID) mediante el ID se obtienen tanto los permisos como cualquier otro dato que sea relevante, para ello un simple DLookup lo obtiene :

Nombre-completo = DLookup ("nombre-completo", "Tabla-Usuarios","ID = " & ID)

Color-preferido = DLookup ("Color", "Tabla-Usuarios","ID = " & ID)

Con ese método incluso se pueden obtener todos los datos del ID (alias usuario activo), basta recorrer la tabla y en lugar del nombre-completo o color que es la variable (el ID seria una constante), poner mediante un bucle los nombres de los campos de la tabla con los usuarios.

No lo tomes como una critica, es un enfoque diferente que se adecuara o no a lo que se pretende.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas