Consulta Inner Join entre más de 3 tablas access vba

Hice una consulta inner join, este es el código:

Private Sub txtBusquedaGeneral_AfterUpdate()

Dim Consulta As String

       Consulta = "SELECT Reporte_tabla.*" _
       & "FROM Reporte_tabla" _
       & " INNER JOIN TICS On Reporte_tabla.Folio=TICS.Folio" _
       & " WHERE TICS.Tipo_indicio_tics LIKE '*" & Me.txtBusquedaGeneral & "*'" _
       & " ORDER BY Fecha_intervencion,Hora_llamado"
       Me.sub_reportes_consultas.Form.RecordSource = Consulta

End Sub

Mi duda es como agregar otro inner join para unir otra tabla a la consulta con más condiciones (where)

 Por el momento hice esta consulta pero no va.

Consulta = "SELECT Reporte_tabla.*" _
& "FROM ((Reporte_tabla" _
& " INNER JOIN TICS On Reporte_tabla.Folio=TICS.Folio)" _
& " INNER JOIN Quimicos On TICS.Folio=Quimicos.Folio)" _
& " WHERE TICS.Tipo_indicio_tics LIKE '*" & Me.txtBusquedaGeneral & "*'" _
& " Or Quimicos.Tipo_indicio_quimicos LIKE '*" & Me.txtBusquedaGeneral & "*'" _
& " ORDER BY Fecha_intervencion,Hora_llamado"
Me.sub_reportes_consultas.Form.RecordSource = Consulta

1 respuesta

Respuesta
1

Supongo que la primera corrección será añadir un espacio al final de la primera línea o el princio de la siguiente:

Consulta = "SELECT Reporte_tabla.*" _
& "FROM ((Reporte_tabla" _

Consulta = "SELECT Reporte_tabla.*FROM ((Reporte_tabla" _

Debería ser asi:  "SELECT Reporte_tabla.*        FROM ((Reporte_tabla" _  <<<===  (mas de un espacio para que resalte el error)

Por el resto no veo que problema hay en poner un punto de interrupción en la línea siguiente y (en la ventana de inmediato) para verificar como queda la SQL escribir esto:

¿

¿

? Consulta

Añadir más tablas se puede hacer y para verificar la SQL en su conjunto, se copia el texto de/en la ventana de inmediato, se le añade un punto y coma al final y se pega en una consulta gráfica nueva.
Si se pone en modo 'vista diseño' Access delatara los problemas de sintaxis que pueda haber.

Añadir más tablas es tan sencillo como arrastrarlas a esa ventana (la de la consulta en modo diseño) y enlazar los campos de relación (además de elegir para cada relación su tipo de dependencia).

Al autor (que tiene todo el entorno y datos) le será más sencillo verificarla que a quienes no disponen del entorno y han de emularlo.

Hola buen día, no entendí muy bien tu respuesta pero intentare "jugar" con los espacios en la consulta, muchas gracias

No consiste en poner más espacios, es poner 'el indispensable espacio que le falta' (partiendo de que lo publicado es una copia fiel).

Si (sin manipular una coma) se pone un punto de interrupción (la ejecución del código se detendrá) se podrá 'ver' la SQL (el contenido de 'Consulta') en la ventana de inmediato y se apreciará el problema.

Me mantengo en que una forma cómoda de añadir más tablas y condiciones es utilizando los asistentes de Access, en particular el motor del generador grafico de consultas fue una de las mejores adquisiciones de Microsoft a sus competidores.

Hola, si los busca ahora en la consulta pero solo me trae un registro coincidente de una tabla, lo que quiero es que me traiga todos los registros de todas las tablas donde haya ese campo en común, creo que intentare hacerlo con un for para que recorra (busque) en todos los reportes?

así quedo la consulta, puse 8 espacios en blanco donde va despues de Reporte_tabla.*

Consulta = "SELECT Reporte_tabla.*         FROM((Reporte_tabla" _
& " INNER JOIN TICS On Reporte_tabla.Folio=TICS.Folio)" _
& " INNER JOIN Quimicos On TICS.Folio=Quimicos.Folio)" _
& " WHERE TICS.Tipo_indicio_tics LIKE '*" & Me.txtBusquedaGeneral & "*'" _
& " Or Quimicos.Tipo_indicio_quimicos LIKE '*" & Me.txtBusquedaGeneral & "*'" _
& " ORDER BY Fecha_intervencion,Hora_llamado"
Me.sub_reportes_consultas.Form.RecordSource = Consulta

No has captado la idea original, puedes ponerle trescientos espacios (o más) pero solo se necesita UNO que separe el asterisco de FROM. Pues NO ENTIENDE donde finaliza 'Reporte_tabla.*' y donde comienza 'FROM' porque al faltar el espacio entre ellos los une y ..... se monta el lio (un problema clásico cuando se trocea el texto ...).

¿Realmente qué deseas?, porque tal como está planteada la consulta, solo devolverá los registros de la tabla 'Reporte_tabla' y condicionados a que el dato de referencia (que es externo) este en una u otra de las tablas relacionadas (no se condiciona a la tabla 'Reporte_tabla', solo a TICS y a QUIMICOS)

Si se desea obtener los registros de las tablas QUIMICOS + TICS + REPORTE_TABLA que contengan el dato externo, la solución debería de ir en la línea de consultas independientes o una de unión (si hay compatibilidad de datos) o una de unión que devuelva el ID + nombre_de_la_tabla (para poder obtener el resto de los datos de las tablas si se necesitan).

Utilizar un bucle (el FOR /que sería uno por tabla) es una alternativa a crear tres consultas (una por tabla), tendrás que ser tú que conoces la aplicación y la necesidad, quien decida la alternativa que mejor domine o le parezca más idónea.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas