Código VBA para formulario de búsqueda

Tengo creado en mi BBDD un formulario de búsqueda (ForBusqueda) para poder realizar consultas a las tablas de una manera más rápida.

En dicho formulario tengo creado un cuadro de lista (LTCampo) que me permite seleccionar los valores por los que quiero buscar: Oficina, Dirección, Provincia. Tengo creado también un cuadro de texto (CTBusca) que permite escribir lo que se desee buscar. Finalmente, tengo otro cuadro de lista (LTData), que muestra todos los registros que hayan sido encontrados con los dos campos anteriores.

En estos momentos estoy intentando la combinación de un código que me permita unir dos tablas para que salga ese registro. Es decir, tengo una tabla llamada SEDES y una tabla llamada CONTACTOS. En el cuadro de texto LTCampo tengo un valor llamado "Contacto" y quiero que cuando se pulse y se busque un registro con ese valor, muestre todos los datos contenidos en ambas tablas.

El código creado es mediante un Select Case y he intentando esto:

Case Is = "11"
Select Case LTCampo 'Se crea una serie de instucciones
Case Is = "Buscar Contacto"
Me.LTData.RowSource = "SELECT Sedes.IdSede, Sedes.Sede, Contactos.NombreContacto, Contactos.TelefonoContacto FROM Sedes UNION Contactos WHERE NombreContacto & TelefonoContacto & Sede LIKE '*" & Busca.Text & "*' ORDER BY [Sede]ASC;" 
End Select

Pero por algún motivo este código no funciona.

1 respuesta

Respuesta
2

Usas mas la cláusula UNION (sirve para combinar los resultados de dos o más SELECTs), y tu lo que quieres es combinar campos de dos tablas, para lo que has de usar un JOIN, algo así:

Me.LTData.RowSource = "SELECT Sedes.IdSede, Sedes.Sede, Contactos.NombreContacto, Contactos.TelefonoContacto FROM Sedes JOIN Contactos ON Sedes.IdSede=Contactos.IdSede WHERE NombreContacto & TelefonoContacto & Sede LIKE '*" & Busca.Text & "*' ORDER BY [Sede]ASC;" 

Suponiendo que el campo en común es IDSede en las dos tablas.

Un saludo.


Ampliando mi respuesta, igual un simple JOIN no es el más adecuado, y tendrías que hacer un LEFT JOIN o RIGHT JOIN : https://www.w3schools.com/sql/sql_join.asp

Buenas tardes Sveinbjorn El Rojo,

Muchas gracias por la respuesta. Esta tarde probare con JOIN o en su defecto con los otros dos que me has comentado y te digo.

Muchas gracias de nuevo.

Buenas tardesSveinbjorn El Rojo,

He probado el código con lo que me comentaste y funciona perfectamente con INNER JOIN, consiguiendo que muestre los valores de ambas tablas.

El problema reside en que cuando busco un contacto en el campo CTCampo (Un cuadro de texto que me permite buscar de manera más especifica escribiendo lo que yo desee) me muestra el siguiente mensaje:

Al darle a depurar, me muestra la línea de código entera en amarillo:

Me.LTData.RowSource = "SELECT Sedes.IdSede, Sedes.Sede, Contactos.NombreContacto, Contactos.TelefonoContacto FROM Sedes INNER JOIN Contactos ON Sedes.IdSede=Contactos.IdSede WHERE NombreContacto & TelefonoContacto & Sede LIKE '*" & Busca.Text & "*' ORDER BY [Sede]ASC;" 

Pero por más que busco e intento comprender donde está el fallo no lo veo.

Gracias de antemano.

Si la SQL te funciona sin el WHERE (lo puede comprobar en el diseñador de consultas), el problema lo debes tener en el nombre del cuadro de texto: en un lado dices que se llama CTCampo y en la SQl pones Busca.

Por otro lado, la propiedad Text solo deberías usarla si el código lo tienes en el evento "al cambiar", en cualquier otro usa Value

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas