Problema con función dlookup visual basic

Tengo un problema con la función dlookup, tengo una base de datos access con una tabla llamada NominaPersonal de la cual tengo toda la información de los trabajadores. Mediante un formulario el usuario del mismo debe seleccionar por un cuadro combinado un el número de ID del trabajador.

Mi idea es usar dlookup para que muestre el nombre del empleado por ejemplo.

Private Sub cmbBuscar_Click()

Dim nom As String

nom = DLookup("Nombre", "NominaPersonal", "[Nuevo_Legajo]=" & Me!txtLegajo)

txtNombre = nom

Utilizando esto me da error "94" y me dice que es null pero no logro entender que pasa.

2 Respuestas

Respuesta
2

El campo Nuevo_Legajo ¿Es el que tiene el id del trabajador en la tabla? ¿Es numérico?

Y txtLegajo ¿qué es, el cuadro combinado en el que eliges el ID u otro control?

Porque a priori la sintaxis es correcta, pero si los elementos no lo son, mal te va a funcionar...

Por otro lado, igual te era más fácil hacer que el cuadro combinado tenga dos columnas (id y nombre) y usar su propiedad column para mostrar el nombre en el cuadro de texto...

Hola! El campo Nuevo_Legajo tiene el ID del trabajador en la tabla y es numérico.

txtLegajo es un cuadro de texto donde se almacena el número de ID del trabajador que estoy buscando.

El cuadro combinado en efecto tiene dos columnas (id,Nombre) pero está oculto el ID para buscar con el nombre.

Necesito buscar la información con el cuadro combinado y que me traiga de la tabla NominaPersonal toda la información que necesite según el formulario.

Pues es muy sencillo: si tu cuadro combinado se llama cmbBuscar, tiene dos columnas (id y Nombre), y la columna dependiente (el valor que devuelve, no la que muestra) es la primera (es decir el Id), yo haría en el evento "Después de actualizar" del cuadro combinado:

Private Sub cmbBuscar_AfterUpdate()
Me.txtLegajo=Me.cmbBuscar 'Pasas el valor al cuadro de texto, aunque no te haría falta si haces dependiente el cuadro combinado
Me.txtNombre=DLookup("Nombre", "NominaPersonal", "[Nuevo_Legajo]=" & Me.cmbBuscar)
'También te valdría esta otra forma: Me.txtNombre=Me.cmbBuscar.Column(1)
'Si necesitas traer más información, se la sigues añadiendo, por ejemplo:
'Me.txtApellidos=DLookup("Apellidos", "NominaPersonal", "[Nuevo_Legajo]=" & Me.cmbBuscar)
End Sub

Te dejo una mini-guía sobre cuadros combinados y las distintas posibilidades que tienes para trabajarlos: http://neckkito.xyz/nck/index.php/ejemplos/16-controles/123-cuadros-combinados 

Respuesta
2

Es lógico que te diga que es nulo, el evento Al hacer click del combinado buscar equivale a que pongas el cursor sobre el, pero... todavía no has elegido nada. Otra cosa es ¿para que declarar la variable Nom cuando luego vas a decir que txtnombre=nom, lo lógico sería decir

txtnombre=dlookup.....

Porotro lado, pones como criterio 

"[nuevo_legajo]=" & me.txtlegajo

Pero si txtlegajo es texto debería ser

"[nuevo_legajo]= '" & me.txtlegajo

Si quieres elegir el idtrabajador del combinado buscar deberías poner, en el evento Después de actualizar del combinado

txtnombre=dlookup("nombre","nominapersonal","idtrabajador= " & me.buscar & "")

En caso de que en el combinado, en su origen de la fila le pusieras los campos Idtrabajador, Nombre, en el evento antes citado puedes poner simplemente

txtnombre='" & me.buscar.column(1) & "'

Muchas gracias Icue! lo hice de la siguiente manera.

Private Sub cmbBuscar_Click()

txtNombre = DLookup("Nombre", "NominaPersonal", "Nuevo_Legajo= " & Me.cmbApellido & "")


End Sub

Ya que una vez que selecciono a la persona en el cuadro combinado, cree un boton que se llama buscar para ejecutar la acción. Por otra parte; tienes razón el combinado, en su origen de la fila le coloque los campos Idtrabajador o Legajo que son numéricos.

Sin embargo; el txtNombre donde deberia quedar asentado el nombrel trabajador que seleccione me queda vacío. no tengo idea que puede estar afectando.

Si tengo una tabla

Fíjate en los datos del marcado con la flecha. Si tengo un formulario con un combinado y un cuadro de texto,

Cuando elijo Hanna Moos

No necesitas botón, el código del evento Después de actualizar del combinado es

En este caso, como el valor que tiene el combinado en su columna dependiente es texto le pongo '" & me.combinado & "'"

Si fuera numérico sería " & me.combinado & ""

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas