Jalar información de una tabla
Quisiera saber como puedo hacer que en un formulario me aparezca información cuando yo seleccione una opción de un campo, es decir, cuando en un campo seleccione una opción como un Nombre, en otros campos me aparezca automáticamente los datos de esa persona que tengo en otra tabla, como son domicilio, teléfono, mail, ciudad, etc, pero que esos dats me aparezcan en el formulario cuando yo seleccione a esa persona de otro campo.
1 Respuesta
Respuesta de santiagomf
1
1
santiagomf, Más de 35 años en la informática y más de 20 trabajando con...
A ver si me explico claramente.
Supongamos que tienes 2 tablas "clientes y datosPersonales" y que los campo de dichas tablas son:
Clientes
IdCliente (numérico)
NombreCliente
...
DatosDomicilio
IdCliente (numérico)
DomicilioCliente
TelefonoCliente
...
Podrías tener un cuadro combinado (llamémosle cuadroCombinado1) que te presente los datos de la tabla de clientes y que tenga en sus propiedades los siguientes valores:
Nombre: cuadroCombinado1
Tipo de origen de la fila: Tabla/Consulta
Origen de la fila: clientes
Número de columnas: 2
Ancho de columnas: 0 cm;10 cm
Columna dependiente: 1
Una vez que tengas esto, puedes incluir en tu formulario los 'textBox' necesarios para cada dato que quieras presentar. Cada uno de estos campos estarán con la propiedad "Activado" a 'Falso' y en "Origen del control" pondrás, dependiendo del dato que quieras, lo siguiente:
=nz(dlookup("domicilioCliente";"datosDomicilio";"idCliente=" & nz(me.cuadroCombinado1;-1));"") ' Este traería el campo domicilio.
Cambiando el nombre del campo, puedes traerte todos los datos de la tabla a diferentes campos.
Supongamos que tienes 2 tablas "clientes y datosPersonales" y que los campo de dichas tablas son:
Clientes
IdCliente (numérico)
NombreCliente
...
DatosDomicilio
IdCliente (numérico)
DomicilioCliente
TelefonoCliente
...
Podrías tener un cuadro combinado (llamémosle cuadroCombinado1) que te presente los datos de la tabla de clientes y que tenga en sus propiedades los siguientes valores:
Nombre: cuadroCombinado1
Tipo de origen de la fila: Tabla/Consulta
Origen de la fila: clientes
Número de columnas: 2
Ancho de columnas: 0 cm;10 cm
Columna dependiente: 1
Una vez que tengas esto, puedes incluir en tu formulario los 'textBox' necesarios para cada dato que quieras presentar. Cada uno de estos campos estarán con la propiedad "Activado" a 'Falso' y en "Origen del control" pondrás, dependiendo del dato que quieras, lo siguiente:
=nz(dlookup("domicilioCliente";"datosDomicilio";"idCliente=" & nz(me.cuadroCombinado1;-1));"") ' Este traería el campo domicilio.
Cambiando el nombre del campo, puedes traerte todos los datos de la tabla a diferentes campos.
Gracias por la información, pero no es lo que requiero, creo que me explique mal, vuelvo a plantear la pregunta, lo que necesito es que en mi formulario tengo campos en donde va a quedar registrada la información sobre los datos de la persona, es decir tengo un formulario que tiene los campos, NOMBRE, DIRECCIÓN, COLONIA, CP, CIUDAD Y ESTADO, ETC, este formulario lo creé de una tabla llamada AGENDA en donde tengo toda esa información, pero constantemente vuelvo a capturar la misma información por NOMBRE y repito la captura de todo, entonces lo que quiero es que para no repetir esa captura en el momento en que seleeciono el NOMBRE, en los campos correspondientes a DOMICILIO, COLONIA, CP, CIUDAD Y ESTADO, ETC se rellenen automáticamente para que no los vuelva a capturar y se queden registrados en mi tabla AGENDA, espero me puedas ayudar, gracias
Disculpa el retraso en la respuesta pero me estado atendiendo unos problemas personales.
Esta tarde intentaré contestarte (tengo unas cuantas preguntas pendientes).
Esta tarde intentaré contestarte (tengo unas cuantas preguntas pendientes).
Perdona de nuevo el retraso.
Si lo que quieres es que al seleccionar un valor de un campo (llamémosle campoCombinado1) se rellene el valor de otros campos (digamos campoTextoDomicilio y campoTextoTelefono), lo que tendrías que hacer es poner 'Procedimiento de evento' en la propiedad 'Al Cambiar' del campoCombinado1 y pulsar sobre el botón que aparece con tres punto "...".
Esto te llevará a la ventana de Visual Basic. En ella tienes que poner el siguiente código:
Private Sub cuadroCombinado1_Change()
' Supongamos que los datos están en la tabla datosDomicilio (como en el ejemplo que te mandé)
' Este traería el campo domicilio.
me.campoTextoDomicilio=nz(dlookup("domicilioCliente","datosDomicilio","idCliente=" & nz(me.cuadroCombinado1,-1)),"")
' Este traería el campo teléfono.
me.campoTextoTelefono=nz(dlookup("telefonoCliente","datosDomicilio","idCliente=" & nz(me.cuadroCombinado1,-1)),"")
End sub
Con ese código, cada vez que cambie el valor del cuadroCombinado1, el programa accederá a la tabla para traer sus datos a los textBox.
Si lo que quieres es que al seleccionar un valor de un campo (llamémosle campoCombinado1) se rellene el valor de otros campos (digamos campoTextoDomicilio y campoTextoTelefono), lo que tendrías que hacer es poner 'Procedimiento de evento' en la propiedad 'Al Cambiar' del campoCombinado1 y pulsar sobre el botón que aparece con tres punto "...".
Esto te llevará a la ventana de Visual Basic. En ella tienes que poner el siguiente código:
Private Sub cuadroCombinado1_Change()
' Supongamos que los datos están en la tabla datosDomicilio (como en el ejemplo que te mandé)
' Este traería el campo domicilio.
me.campoTextoDomicilio=nz(dlookup("domicilioCliente","datosDomicilio","idCliente=" & nz(me.cuadroCombinado1,-1)),"")
' Este traería el campo teléfono.
me.campoTextoTelefono=nz(dlookup("telefonoCliente","datosDomicilio","idCliente=" & nz(me.cuadroCombinado1,-1)),"")
End sub
Con ese código, cada vez que cambie el valor del cuadroCombinado1, el programa accederá a la tabla para traer sus datos a los textBox.
Hola gracias por la respuesta, me funciono bien, ahora tengo una duda más, resulta que para que me hiciera lo que me explicaste tuve que meter a mi formulario los texbox independientes, y si se rellenan con los datos, ¿pero no me quedan registrados en mi tabla y yo necesito que se queden en mi tabla como si los hubiera capturado por que de esa tabla hago mis consultas me puedes decir como hacer que queden en capturados en mi tabla o que fue lo que hice mal o si para que esto suceda tengo que volver a hacer todo o como? Gracias por la ayuda
Vamos a ver, si tu traes un dato de una tabla para grabarlo exactamente igual en otra... estás duplicando información. Algo que en el diseño de una base de datos medianamente optimizada está totalmente prohibido.
Si lo que quieres es que te aparezca el domicilio y el teléfono en tu consulta, deberías usar más de una tabla en la consulta: supongamos una tabla de facturas y otra de clientes relacionadas por el número de cliente. Eso sería lo correcto.
De todas formas, si no quieres entrar en diseños optimizados y lo que buscas es algo que te resulte más sencillo, te comento que esos campos que te ponía en el código de ejemplo anterior 'me. CampoTextoDomicilio' y 'me. CampoTextoTelefono' pueden estar asociados a un campo de la tabla del formulario, por lo que al grabarlos quedarían actualizados en tu tabla.
Si lo que quieres es que te aparezca el domicilio y el teléfono en tu consulta, deberías usar más de una tabla en la consulta: supongamos una tabla de facturas y otra de clientes relacionadas por el número de cliente. Eso sería lo correcto.
De todas formas, si no quieres entrar en diseños optimizados y lo que buscas es algo que te resulte más sencillo, te comento que esos campos que te ponía en el código de ejemplo anterior 'me. CampoTextoDomicilio' y 'me. CampoTextoTelefono' pueden estar asociados a un campo de la tabla del formulario, por lo que al grabarlos quedarían actualizados en tu tabla.
Mándame una copia de tu base de datos en un fichero comprimido en zip (en versión anterior a 2007), y te reviso el formulario y preparo alguna consulta.
Mi correo es: [email protected].
Si el fichero ocupa más de 1 mb, me lo envías a [email protected] y me mandas un aviso a mixmail (el correo de hotmail lo consulto cada más tiempo).
Por cierto, ponme cual es tu nick de todoexpertos porque tengo correos que no sé de quién son.
Mi correo es: [email protected].
Si el fichero ocupa más de 1 mb, me lo envías a [email protected] y me mandas un aviso a mixmail (el correo de hotmail lo consulto cada más tiempo).
Por cierto, ponme cual es tu nick de todoexpertos porque tengo correos que no sé de quién son.
Que tal, disculpa por no contestarte andaba un poco ocupado, por fin logre lo que queria gracias a la información que me proporcionaste para ser exacto lo logre con esto
me.campoTextoTelefono=nz(dlookup("telefonoCliente","datosDomicilio","idCliente=" & nz(me.cuadroCombinado1,-1)),"")
Hice un código por cada campo que requería que se rellenara, gracias!
Ahora tengo otra pregunta es sobre una consulta que quiero realizar
En mi campo Nombre, tengo varios capturados ejemplo:
Víctor Manuel García nava
Víctor gonzalez morales
Víctor esquivel velázquez
ETC, ETC,
Los nombre los tengo separados NOMBRE, APELLIDO PATERNO, APELLIDO MATERNO, en una consulta hice una concatenación para que me junte los campos y me de el nombre junto cuando ejecuto la consulta´pues me arroja todos los registros que tengo, ahora quiero que esa consulta me de solo el resultado de el nombre que yo escriba, es decir que cuando ejecute la consulta primero me pregunte que nombre deseo que me de y que si escribo VÍCTOR, me arroje todos los resultados de todos los registros que comiencen con VÍCTOR, o si escribo JUAN, me de todos los registros que contengan el nombre JUAN, ¿Cómo puedo hacer esto?
Primero que cuando ejecute la consulta me pregunte algo así (ESCRIBA EL NOMBRE QUE DESEA CONSULTAR) y cuando yo lo escriba me arroje todos los registros que contengan ese nombre que escribí
Gracias, saludos
me.campoTextoTelefono=nz(dlookup("telefonoCliente","datosDomicilio","idCliente=" & nz(me.cuadroCombinado1,-1)),"")
Hice un código por cada campo que requería que se rellenara, gracias!
Ahora tengo otra pregunta es sobre una consulta que quiero realizar
En mi campo Nombre, tengo varios capturados ejemplo:
Víctor Manuel García nava
Víctor gonzalez morales
Víctor esquivel velázquez
ETC, ETC,
Los nombre los tengo separados NOMBRE, APELLIDO PATERNO, APELLIDO MATERNO, en una consulta hice una concatenación para que me junte los campos y me de el nombre junto cuando ejecuto la consulta´pues me arroja todos los registros que tengo, ahora quiero que esa consulta me de solo el resultado de el nombre que yo escriba, es decir que cuando ejecute la consulta primero me pregunte que nombre deseo que me de y que si escribo VÍCTOR, me arroje todos los resultados de todos los registros que comiencen con VÍCTOR, o si escribo JUAN, me de todos los registros que contengan el nombre JUAN, ¿Cómo puedo hacer esto?
Primero que cuando ejecute la consulta me pregunte algo así (ESCRIBA EL NOMBRE QUE DESEA CONSULTAR) y cuando yo lo escriba me arroje todos los registros que contengan ese nombre que escribí
Gracias, saludos
Para consultar por valores 'que se parezcan a' un valor determinado tienes la opción de comparación 'like'.
Cuando en una comparación pones "=" significa que una parte de la comparación sea igual a la otra; si pones "<>" obligas a que sean distintas; y si pones 'like', la primera tiene que ser 'como' la segunda.
En la segunda parte de la comparación podemos usar caracteres 'comodines'. Estos son: "*" para cualquier cadena y "?" para un único carácter.
De esta forma, nombreCliente like 'VÍCTOR*' devolvería todos aquellos que tengan al principio 'VICTOR' y después venga cualquier cosa. Con nombreCliente like '*VÍCTOR*' devolvería los registros que tengan la palabra 'VICTOR' en cualquier parte del campo.
Una posible forma para buscar por primer apellido sería localizar los que tengan dicho apellido entre blancos. Por ejemplo: nombreCliente like '* ' & apellidoBuscado & ' *'. El nombre debería tener: <cualquier cosa><blanco><el apellido><blanco><cualquier cosa>.
Cuando en una comparación pones "=" significa que una parte de la comparación sea igual a la otra; si pones "<>" obligas a que sean distintas; y si pones 'like', la primera tiene que ser 'como' la segunda.
En la segunda parte de la comparación podemos usar caracteres 'comodines'. Estos son: "*" para cualquier cadena y "?" para un único carácter.
De esta forma, nombreCliente like 'VÍCTOR*' devolvería todos aquellos que tengan al principio 'VICTOR' y después venga cualquier cosa. Con nombreCliente like '*VÍCTOR*' devolvería los registros que tengan la palabra 'VICTOR' en cualquier parte del campo.
Una posible forma para buscar por primer apellido sería localizar los que tengan dicho apellido entre blancos. Por ejemplo: nombreCliente like '* ' & apellidoBuscado & ' *'. El nombre debería tener: <cualquier cosa><blanco><el apellido><blanco><cualquier cosa>.
Hola que tal pues no me sale lo que deseo.
Tengo otra consulta que hacerte, también quiero hacer una consulta que me arroje por resultado solo los registros que indique en un rango de "X" fechas, es decir que a la hora de ejecutar la consulta me pregunte una fecha inicial y después me pregunte una fecha final y me de por resultado todos los registros entre esas fechas que indique
Gracias por tu ayuda
Tengo otra consulta que hacerte, también quiero hacer una consulta que me arroje por resultado solo los registros que indique en un rango de "X" fechas, es decir que a la hora de ejecutar la consulta me pregunte una fecha inicial y después me pregunte una fecha final y me de por resultado todos los registros entre esas fechas que indique
Gracias por tu ayuda
Fíjate bien en el texto que te puse el otro día para lo del nombre y apellidos. Hay blancos entre medias que son importantes.
El problema lo tendrás cuando la persona tenga apellidos y/o nombres compuestos. En ese caso sólo existe la posibilidad de separarlos manualmente en una tabla con los dos campos.
Sobre la nueva pregunta. En una consulta, en la parte de criterios puedes poner:
Entre [Fecha Inicial] y [Fecha Final]
Con eso te pedirá las dos fechas al ejecutar la consulta y te devolverá los registros cuya fecha esté entre las dos indicadas.
OJO: Si la fecha de tus registros contiene hora-minutos-segundos, es posible que la comparación no sea exactamente como quieres. Para quitar la hora de un campo llamado 'fecha' puedes usar: dateserial(year(fecha);month(fecha);day(fecha))
De esa forma te aseguras que no falla la comparación.
El problema lo tendrás cuando la persona tenga apellidos y/o nombres compuestos. En ese caso sólo existe la posibilidad de separarlos manualmente en una tabla con los dos campos.
Sobre la nueva pregunta. En una consulta, en la parte de criterios puedes poner:
Entre [Fecha Inicial] y [Fecha Final]
Con eso te pedirá las dos fechas al ejecutar la consulta y te devolverá los registros cuya fecha esté entre las dos indicadas.
OJO: Si la fecha de tus registros contiene hora-minutos-segundos, es posible que la comparación no sea exactamente como quieres. Para quitar la hora de un campo llamado 'fecha' puedes usar: dateserial(year(fecha);month(fecha);day(fecha))
De esa forma te aseguras que no falla la comparación.
Perfecto, si es lo que quería para lo de las fechas, pero aun no consigo la consulta con el otro criterio, lo que estoy poniendo en mi consulta es lo siguiente
[INGRESE NOMBRE] Como'*'
Con esto solo me pregunta el nombre, lo escribo y no me arroja nada
no se que este haciendo mal, solo quiero que cuando me pregunte INGRESE NOMBRE, yo escribo Juan y me arroje todos los registros que empiecen con Juan
Juan manuel
Juan antonio
Juan
Etc, etc,
Saludos y gracias
[INGRESE NOMBRE] Como'*'
Con esto solo me pregunta el nombre, lo escribo y no me arroja nada
no se que este haciendo mal, solo quiero que cuando me pregunte INGRESE NOMBRE, yo escribo Juan y me arroje todos los registros que empiecen con Juan
Juan manuel
Juan antonio
Juan
Etc, etc,
Saludos y gracias
Si estás usando la ayuda de Access para construir consultas, tienes que poner en la parte de 'criterios' del campo "nombreYApellidos" (o como se llame) lo siguiente:
como [INGRESE NOMBRE] & "*"
Eso significa que el campo contenga: <lo que teclees> y cualquier cosa detrás (*).
como [INGRESE NOMBRE] & "*"
Eso significa que el campo contenga: <lo que teclees> y cualquier cosa detrás (*).
Perfecto! Muchas gracias por toda tu ayuda, mi proyecto quedo terminado y me funciona bien.
Yo creo que más adelante te estaré molestando de nuevo para cualquier duda que me salga o para hacer algo más avanzado como tener diferentes tablas y relacionarlas y hacer diferentes consultas.
Saludos y nuevamente gracias
Yo creo que más adelante te estaré molestando de nuevo para cualquier duda que me salga o para hacer algo más avanzado como tener diferentes tablas y relacionarlas y hacer diferentes consultas.
Saludos y nuevamente gracias
- Compartir respuesta
- Anónimo
ahora mismo