![]() |
Buscar un nombre en diferentes tablas
Buenos días,
Por un lado tengo una tabla Clientes y por otro Contactos. Esta última representa los contactos que tiene cada cliente. En este caso cada cliente puede tener varios contactos pero cada contacto solo tiene un cliente. Lo tengo hecho de tal manera que la tabla contactos tiene un campo IdCliente y es lo que uso en la consultas a través de SQL para saber qué contactos están vinculados a un cliente determinado. El caso es que tengo un buscador en la ficha de clientes que permite localizar un cliente por su nombre, apellidos, dni o tfno No se si es posible pero me interesaría que el buscador buscase en uno de esos campos tanto en la tabla clientes como en la tabla contactos ya que en muchas ocasiones al buscar una persona no sabemos si es cliente o contacto. El buscador tiene los edit para introducir la búsqueda y por debajo un dbgrid que se va filtrando con los registros de clientes. Uso ADO y Access No sería demasiado importante que el DBGrid mostrase las dos tablas pero sí que por lo menos se viese el cliente que está relacionado con el campo del contacto que se busca. Se me ocurrió crear un campo de texto en la tabla clientes que recogiese los nombres de los contactos y así incluir ese campo en la búsqueda pero cuando hay muchos contactos resulta poco "limpio" hacer esto. ¿Habría otra solución para poder ejecutar esta búsqueda? Muchas Gracias |
Hola Delphitest
Mi a ver si con esto te vale. Con esto buscaras en todos los campos en ambas tablas. Un saludo |
Muchas gracias por tu ayuda olbeup,
He probado porque lo que indicas tiene bastante lógica pero me salta un error de sintasis en el FROM He ido reduciendo la sentencia SQL para ver qué es lo que no funciona y por lo que veo es en tramo donde pongo INNER JOIN... He intentado diferentes combinaciones a ver si con una funcionaba pero no hay manera. Los nombres de los campos son correctos y los de las tablas tambien |
Cita:
Revisa la sintáxis de INNER JOIN Saludos :) |
Era por eso si, gracias
Ya no da el error de sintasis en cuanto le he añadido el ON Ahora estoy intentando entender porque solo muestra registros que tengan algún contacto Es decir que no muestra los clientes que no tengan contactos relacionados. Si un cliente tiene al menos un contacto relacionado si que aparece en el resultado de la búsqueda pero si el cliente tiene solo su registro sin ningún contacto relacionado pues no aparece en la lista. |
Hola Delphitest.
Cita:
Saludos :) |
1 Archivos Adjunto(s)
Adjunto un pantallazo del form y el código que estoy probando porque me estoy liando un poco.
Por un lado tengo el formulario para buscar un cliente Tiene unos edits donde meto lo que quiero buscar y a medida que escribo el dbgrid que hay por debajo se va filtrando con lo que corresponda. Lo que pretendo es que al poner el nombre, ademas de buscar en el nombre de la tabla clientes, lo haga también en la tabla contactos de tal manera que el grid vaya mostrando el o los clientes cuyo nombre sea el que estoy escribiendo en el edit correspondiente o el cliente que tenga un contacto cuyo nombre coincida también con la búsqueda. Con este código solo veo el cliente cuyo nombre contenga lo que escribo en el edit pero no está buscando en contactos por las pruebas que he hecho. También he notado que si el cliente no tienen ningún contacto relacionado, tampoco se lista.
Las tablas están en un Data Modulo a parte pero los campos se leen sin problemas y TBuscarCliente es una query que esta en este Form y que esta relacionada con el DBGrid, igual tengo el problema ahí... |
¿Pero eso no es lo mismo que esto?
|
Buenos días,
inicialmente la idea era buscar por varios campos en una sola tabla, la de clientes. Eso ya se resolvió en el post que comentas y funciona perfectamente. Ahora me ha surgido la necesidad de que la búsqueda se haga ademas de en la tabla de clientes, también y a la vez en la tabla de contactos. De ahí mi consulta para intentar adaptar el código. ECFISA, he probado con FULL OUTER en lugar de INNER pero me devuelve este error: "Objeto Parameter mal definido. Se proporcionó información incompleta o incoherente" |
Vaya, ayer me tire unas cuantas hora probando de todo y no había manera, hoy me he levantado inspirado y después de hacer pruebas ya consigo que los resultados de la búsqueda muestren también los clientes que no tenga contactos relacionados.
Me funciona utilizando LEFT JOIN Solo me falta que la búsqueda tenga en cuenta los datos de la tabla contactos, porque estoy comprobando que no lo hace, solo se buscan dentro de clientes. |
Ya sé donde tengo el fallo pero no acabo de dar con la solución.
Sólo se tiene en cuenta la primera condición pero no lo que pongo después del 'OR', posiblemente no lo esté escribiendo correctamente. El caso es que no da error de ningun tipo pero veo que no lo tiene en cuenta. He hecho estas pruebas: Con esto lo busca solo en la tabla de clientes
Con esto lo busca solo en la tabla de contactos
He probado por si acaso:
Pero nada, tiene que ser algo relacionado con el uso de las comillas o paréntesis pero por muchas combinaciones que estoy haciendo no doy con ello. |
Solucionado... :)
Como se suele decir, no te acostarás sin saber una cosa más. He llegado a la conclusión que solo puedo hacer uso del parámetro una vez en la sentencia. Al probar con dos parámetros se ha solucionado el problema.
Muchas gracias por vuestra ayuda y siento haber mareado tanto con este tema Un abrazo y buen fin de semana |
La franja horaria es GMT +2. Ahora son las 22:11:00. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi