Establecer parámetros en una consulta de unión

Tengo una consulta de selección basada en consultas de unión. Estas consultas de unión se diferencian unas de otras en tres campos: día, turno y grupo. La cuestión es que ahora tengo una consulta de unión para cada día/turno/grupo ¿se podrían establecer parámetros en una única consulta de unión para no tener que ir cambiando de consulta cuando quiera ejecutar la consulta de selección para un día, turno y grupo concreto?

1
Respuesta
2

No acabo de entender del todo tu pregunta, si la explicas un poco más, e incluso si pones las SQLs de tus consultas, quizás te pueda orientar.

Hola Sven, cuánto tiempo, me alegro de contactar de nuevo contigo.

Ok. Verás estas son mis consultas de unión.

Tengo hecha una para cada día. D12-D13-D14-D15 con la siguiente estructura:

SELECT [tabla1].[PAREJA],[tabla1].NOMBRE, FROM [tabla1]

WHERE[tabla1].[D12]="T" OR [tabla1].[D12]="M/T"

UNION SELECT [tabla2].[PAREJA],[tabla2].NOMBRE,FROM [tabla2]

WHERE

[tabla2].[GRUPO]= "A" OR [tabla2].[GRUPO]= "B";

para el día 13 (D13)---- Sólo cambiaría la parte final

WHERE

[tabla2].[GRUPO]= "C" OR [tabla2].[GRUPO]= "B";

para el día 14 (D14) ---- idem

WHERE

[tabla2].[GRUPO]= "C" OR [tabla2].[GRUPO]= "A";

para el día 15 (D15) ---- idem.

WHERE

[tabla2].[GRUPO]= "A" OR [tabla2].[GRUPO]= "B";


y luego estas otras donde cambiaría el turno y el grupo

Día 12:

SELECT [tabla1].[PAREJA],[tabla1].NOMBRE, FROM [tabla1]

WHERE[tabla1].[D12]="M" OR [tabla1].[D12]="M/T"

UNION SELECT [tabla2].[PAREJA],[tabla2].NOMBRE,FROM [tabla2]

WHERE

[tabla2].[GRUPO]= "A" OR [tabla2].[GRUPO]= "B";

y para el día 13, 14 y 15 volvería hacer los cambios sólo en los grupos

Lo que necesito es "simplicidad"

Utilizo estas consultas en una de selección para sacar datos que utilizaré luego para hacer un informe y tal y como lo he planteado cada día debo cambiar la consulta de unión. Que vale, no hay problema, pero podría ejecutar la consulta sin darme cuenta de haber cambiado la consulta de union para el día correspondiente y tener unos datos que no son lo que deberían ser

Por eso había pensado en si se podría seleccionar

- el turno. Que aparece en los campos D12, D13, D14 entre:
 "T o M/T" o
 "M o M/T"

- el grupo. Que siempre ha de ser:
"A o B" o
"B o C" o
"A o C"

O, a lo mejor hay una manera de que cuando ejecute la consulta de selección pueda seleccionar qué consulta de unión quiero utilizar (ya que las tengo hechas, je, je)

No sé si así queda más claro

Muchas gracias y un saludo

Se me ocurre una posible solución, si la consulta la lanzas desde un formulario en el que selecciones los parámetros.

La idea sería la siguiente:

Creas un formulario con 3 cuadros combinados: cboDia (4 valores "D12", "D13","D14" y "D15"), cboTurno (2 valores "T o M/T" y "M o M/T") y cboGrupo (3 valores "A o B", "B o C" y "A o C") y un botón para ejecutar la consulta cmdConsulta. Los combos defínelos como "lista de valores" y ponle a mano esos valores, en ese orden y con esas expresiones, pues el código los va a coger tal cual y luego trocearlos para separar sus partes y crear los WHERE.

Al código del botón le pones este código:

Private Sub cmdConsulta_Click
'Compruebas que se han seleccionados los tres parámetros
If Nz(Me.cboDia, "") = "" Then
    MsgBox "Tienes que seleccionar un día", vInformation, "ERROR"
    Me.cboDia.SetFocus: Exit Sub
End If
If Nz(Me.cboTurno, "") = "" Then
    MsgBox "Tienes que seleccionar un turno", vInformation, "ERROR"
    Me.cboTurno.SetFocus: Exit Sub
End If
If Nz(Me.cboGrupo, "") = "" Then
    MsgBox "Tienes que seleccionar un grupo", vInformation, "ERROR"
    Me.cboGrupo.SetFocus: Exit Sub
End If
'Creas la SQL y la cargas en la consulta "C1"
Dim miSQL As String
miSQL = "SELECT [tabla1].[PAREJA],[tabla1].NOMBRE FROM [tabla1] " _
    & "WHERE [tabla1].[" & Me.cboDia & "]='" & Left(Me.cboTurno, 1) & "' OR [tabla1].[" & Me.cboDia & "]='" & Right(Me.cboTurno, 3) & "' " _
    & "UNION SELECT [tabla2].[PAREJA],[tabla2].NOMBRE FROM [tabla2] " _
    & "WHERE [tabla2].[GRUPO]= '" & Left(Me.cboGrupo, 1) & "' OR [tabla2].[GRUPO]= '" & Right(Me.cboGrupo, 1) & "'"
CurrentDb.QueryDefs("C1").SQL = miSQL
DoCmd.OpenQuery "C1"
End Sub

Para terminar, tendrás que crear una consulta cualquiera llamada "C1", que será la que se modifique por código cada vez que pulses el botón y se abrirá con la consulta de unión de los parámetros seleccionados.

El código obviamente no lo puedo probar, pero debería funcionarte.

Ya me dices. Saludos!


PD: es fácil encontrarme en el otro foro, en el que creo también estás registrada... ;-)

Hola, estoy en ello y me da error la definición de miSQL.

Gracias

Fíjate bien en los nombres, espacios, comillas ...

Ok.. Lo intentaré de nuevo

Si no te sale, pon aquí el código para que lo mira a ver si veo dónde falla, o mándame una copia de la BD con las tablas (con algún dato inventado) y el formulario

Dim miSQL As String

MiSQL = "SELECT [salas_p].[PAREJA GRUPAL],[ salas_p].EMPLEO, [salas_p].APELLIDOS,[ salas_p].NOMBRE FROM [salas_p]" _

& "WHERE [salas_p].["&Me.cboDia&"]='"&Left(Me.cboTurno,1)&'"OR [salas_p].["&Me.cboDia&"]='"&Right(Me.cboTurno,3)&'"" _

& "UNION SELECT [salas_c].[PAREJA GRUPAL], [salas_c].EMPLEO, [salas_c].APELLIDOS, [salas_c].NOMBRE  FROM [salas_c]" _

& "WHERE [salas_c].[GRUPO]='"&Left(Me.cboGrupo,1)&'" OR [salas_c].[GRUPO]='"&Right(Me.cboGrupo,1)&'""

Currentdb.querydefs("C1").SQL = miSQL

Docmd.openquery "C1"

Por lo que veo, te falta un espacio en blanco antes del UNION y de los 2 WHERE.

También tienes mal las comillas simples (siempre van dentro de las comillas dobles)

E imagino que sería cosa de pegar aquí, pero los & tienen que ir separados del resto.

Te pego aquí la SQL corregida en lo que veo:

miSQL = "SELECT [salas_p].[PAREJA GRUPAL],[salas_p].EMPLEO, [salas_p].APELLIDOS,[salas_p].NOMBRE FROM [salas_p]" _
& " WHERE [salas_p].[" & Me.cboDia & "]='" & Left(Me.cboTurno,1) & "' OR [salas_p].[" & Me.cboDia & "]='" & Right(Me.cboTurno,3) & "'" _
& " UNION SELECT [salas_c].[PAREJA GRUPAL], [salas_c].EMPLEO, [salas_c].APELLIDOS, [salas_c].NOMBRE  FROM [salas_c]" _
& " WHERE [salas_c].[GRUPO]='" & Left(Me.cboGrupo,1) &  "' OR [salas_c].[GRUPO]='" & Right(Me.cboGrupo,1) & "'"

Ya me dirás.

¡Gracias!

Supongo.. Ahora funciona correctamente pero me he dado cuenta de que no es exactamente lo que quiero.. Seguro que podrías solventarlo pero tengo el tiempo encima y, es más, no se si merece la pena tantas molestias por una gente que nunca me va a valorar nada.. Así que se queda como esta.. Como siempre, un placer Sven.. La próxima en tu foro.. Un abrazo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas