Desde un cuadro combinado, al elegir un dato, que automáticamente cargue datos asociados en cuadros de textos diferentes
Os escribo para ver si es posible que desde un cuadro de texto, eligiendo un dato determinado que carga de una tabla, cargue automáticamente datos (que están en la misma tabla) en cuadro de textos diferentes: por ejemplo, nombre, apellido1, apellido2, fecha de nacimiento...
1 respuesta
Lo puedes hacer de varias formas:
a) Usando la función DLookUp() para buscar los datos en la tabla a partir del valor seleccionado en el cuadro combinado
b) Usando la propiedad Column del cuadro combinado, siempre que cargues en el mismo todos los datos que quieres traspasar.
Usando ambos sistemas, puedes también hacerlo por código VBA (si quieres guardar los datos en la tabla) o directamente en el origen de control de los cuadros de texto (si solo te interesa mostrar la información en el formulario, pero no guardarla en la tabla)
Te dejo un artículo que escribí sobre este tema en que lo explico paso a paso y con ejemplos: http://neckkito.xyz/nck/index.php/ejemplos/16-controles/123-cuadros-combinados
Un saludo.
Buen día!
He leído tu documento y he intendo implementarlo pero me da error al depurar: la tercera opción es ya que necesitamos que coja los datos de la persona de un formulario anterior (ya funciona) y que desde una tabla coja una actividad que se le asigna a la persona, para luego guardar todo junto en una segunda tabla.
Me da error en esta línea: Me.txtNomAct = DLookup("ACTIVITAT", "ACTIVITATS", "CODI=" & Me.cboCodAct.Column(3))
Le he dado muchas vueltas pero no consigo que pase :(
No dices el error que te da, por lo que solo puedo hacer suposiciones...
1º/ Comprueba que la cuarta columna (que corresponde al índice 3) de tu cuadro combinado sea la que contiene el valor correspondiente al campo CODI, pues igual tienes que usar otro campo u otra columna...
2º/ Si el campo CODI es de texto, te faltan las comillas simples:
Me.txtNomAct = DLookup("ACTIVITAT", "ACTIVITATS", "CODI='" & Me.cboCodAct.Column(3) & "'")
Ya me irás diciendo cosas para avanzar.
Es la tercera columna: la primera es el código, la segunda es tipología, y la tercera es el nombre (NomAct). He aprovechado este tiempo para unificar nomenclatura:
Me.txtNomAct = DLookup("NomAct", "LlistatActivitats", "CodiAct=" & Me.cboCodAct.Column(3))
El error es el 2450 en tiempo de ejecución: la BBDD no encuentra el formulario al que se hace referencia.
Pues si es la tercera columna el índice que tienes que usar es el 2, porque los índices empiezan en 0:
Me.txtNomAct = DLookup("NomAct", "LlistatActivitats", "CodiAct=" & Me.cboCodAct.Column(2))
Seguimos en la lucha: he seguido aprovechando el tiempo entre respuestas y he modificado nomenclatura y organizado un poco los formularios... nada que afecte a nuestra cuestión.
Ahora da error de sintaxis (falta operador) en la expresión de consulta 'CodiAct='
He verificado que todos los nombres estén correctos.
O.O
Extraño ese error, porque significa que no encuentra valor en esa columna...
Releyendo tu anterior mensaje, creo que te liaste con lo que comento en el ejemplo y mezclas los dos sistemas que explico.
Primero: si ya tienes todas las columnas que quieres traspasar en tu cuadro combinado, no necesitas usar DLookup, tan solo con poner:
Me.txtNomAct = Me.cboCodAct.Column(2)
O el índice que sea, ya lo tienes.
Segundo: si dices que
"Es la tercera columna: la primera es el código, la segunda es tipología, y la tercera es el nombre (NomAct)"
Y en el DLookUp quieres filtrar por código, has de usar la columna que tiene el código, no otra, porque tal como lo planteas, estás buscando en el campo CodiAct el valor de un NomAct, y obviamente, no te lo va a encontrar. Tendrías que usar la primera columna:
Me.txtNomAct = DLookup("NomAct", "LlistatActivitats", "CodiAct=" & Me.cboCodAct.Column(0))
O incluso, si no le cambiaste la propiedad de "columna dependiente" al cuadro combinado:
Me.txtNomAct = DLookup("NomAct", "LlistatActivitats", "CodiAct=" & Me.cboCodAct)
Hola, Sveinbjorn El Rojo:
He intentado utilizar el mismo evento para dos combos diferentes (uno daría automáticamente el país de procedencia, y el otro el destino) pero no me funcionan:
Ambos combos nuevos tiran de dos tablas diferentes que tienen, cada una, dos columnas en que el campo es texto corto. En sí la lógica es la misma: eliges en el combo la empresa de origen y en un texto te dice el país; en el otro eliges la empresa de destino y en un texto te dice la dirección de destino.
Error: 2471, La expresión que ha especificado como parámetro de la consulta produjo el error 'M0604'
:(?
Imagino que será un problema de sintaxis... si el valor por el que filtras es de texto, debe ir entre comillas simples, si es numérico, va directo, y si es de fecha, entre almohadillas.
Sí, tenías toda la razón: en un combo ha resultado, en el otro lo que me sucede es que en el cuadro de texto no muestra la dirección de destino. ¿Podría ser que como está configurado como texto corto y es "bastante largo" no lo muestre por ello?
Si no te da ningún error y no te muestra nada, lo más probable es porque el DLookup() no encuentre nada, y eso quiere decir que el filtro que le aplicas a esa función o no es correcto, o no hay ninguna coincidencia para ese valor.
El que el texto sea más largo que el tamaño del campo solo te llevaría a un aviso de error de que el texto es demasiado largo.
Ya está, rehíce el combo y puse el mismo código et voilà!
Ya está cerrado este tema. Muchas gracias nuevamente, Sveinbjorn El Rojo!
Hola Sveinbjorn El Rojo:
Retomo el tema porque me he encontrado con un error: el combo funciona correctamente si todos los datos solicitados están en la tabla, pero si es un grupo de datos incompletos (es decir, algunas columnas están vacías) me da error al faltar datos. ¿Se puede solucionar y que cargue aunque falten datos? Y aprovecho, ¿es posible que si selecciono otro DNI en el combo, actualice todos los datos, incluyendo los campos en blanco?
Muchas gracias!
- Compartir respuesta