Vaciar consulta de access si es que ningún combobox a sido elegido

Tengo 6 combobox los cuales filtran dos consultas. Y estas consultas están unidas por otra consulta union y es exportada a una tabla en excel. No tengo ningún problema con filtrar los datos de las dos consultas siempre y cuando utilice los combobox. Mi problema se encuentra cuando no selecciono los combobox, quisiera que la consulta se encuentre vacía y no por el contrario se encuentra con todos los datos de la tabla. ¿Tienen alguna idea de como podría solucionar esto?

2 respuestas

Respuesta
1

Las consultas siempre devuelven resultados, salvo en dos casos: que la tabla/s de las que dependen estén vacías, o no encuentre registros que cumplan las condiciones que hayas establecido, ya sea en criterios o en relaciones.

Por tanto, si quieres que tu consulta no devuelva resultados, tendrás que hacer una pequeña trampa y filtrarla de alguna manera que no devuelva registros, por ejemplo, filtrando por nulos los 6 campos de los combos (y digo por ejemplo porque no sé cómo es tu consulta)

Gracias Sveinbjorn,

Mi consulta en sql simplificada a un solo combobox se ve así

SELECT Big_table.* FROM Big_table
WHERE Big_table.Firm Like "*" & [Formularios]![Selection]![cboxfirm] & "*"

Y como dije filtra bien solo quisiera que si no selecciono el combobox cboxfirm y exporte su consulta no existan registros en la consulta.

Por cualquier ayuda te estaría agradecido

Si me permites la pregunta ¿cuál es el sentido de querer abrir la consulta sin datos? Si no tiene datos no vas tener nada que exportar a excel (tal como entiendo yo tu planteamiento)y por tanto, ¿por qué complicarte intentando hacer esa consulta cuando lo puedes solucionar con un MsgBox que diga "No has seleccionado nada, exportación cancelada"

Personalmente no me gusta incluir la funcion SiInm en los criterios de las consultas, pues no siempre acaban de funcionar bien del todo.

Una alternativa sencilla sería que te creases una copia de tu consulta, y la filtres por un valor en algún campo que sepas que nunca va a existir, por ejemplo País=-3.14, y a la hora de lanzar tu proceso de exportación (imagino que lo haces desde un botón), analiza si los combos tienen algún valor o no y en función de eso ejecutas una u otra consulta.

En cuanto a la respuesta de Jacinto, veo una sintaxis un poco rara en la forma de hacer referencia al combo del formulario, desde mi punto de vista sería así: [Formularios]![Frm1]![CboClientes], es decir, sin la parte [Formulario] antes del nombre del control.

Además, evitaría usar la función IsNull, pues si primero seleccionas algo en el combo y lo borras, ya no tienes un nulo, sino una cadena vacía.

Inténtalo con este criterio:

WHERE Big_table.Firm Like "*" & IIF(Nz([Formularios]![Selection]![cboxfirm],"")="","-3.14",[Formularios]![Selection]![cboxfirm]) & "*"

¡Gracias! 

Muchas Gracias sveinjorn funciona perfectamente con tu ultima indicacion.

Bueno lo que pasa es que tengo seis combobox, del cual tres se repiten por ejemplo

tengo pais, ciudad y empresa como combobox. Y si filtro una vez queda almacenada en una consulta y si filtro los siguientes tres combobox para otro pais, ciudad y empresa queda almacenada em otra consulta, al final las uno en una consulta union y las exporto a excel.

Mi problema era que si no utilizaba el filtro por segunda vez me resultaba todos los datos unidos a los ya anteriormente filtrados.

Pero bueno gracias a tu ayuda ya puedo unirlos sin problema.

muchas gracias

No me quedó claro si te funciona correctamente o necesitas más información. Si es lo segundo dime qué más necesitas, y si es lo primero, no te olvides de valorar la respuesta y ¡Hasta la próxima!


Respuesta
1

Daniel: Supongamos que el Formulario se llame Frm1.

Un campo de la consulta que voy a suponer que se llame IdPedido, y que el ComboBox de tu Frm1 se llame CboClientes. En la rejilla de la consulta y Criterios de IdPedido:

SiInm(EsNulo([Formularios]![Frm1].[Formulario]![CboClientes]);0;[IdPedido])

El Cero de ;0; es un valor de IdPedido que "NO EXISTA".

De ese modo, si el CboCliente no tiene un Valor intenta buscar el Cero, y como no estará, la Consulta no devolverá registros, y si tiene cualquier valor te los devolverá todos.

Espero sea eso lo que buscabas. Saludos >> Jacinto

Gracias por las respuestas, pero no es exactamente lo que esperaba ya que al hacer lo que me dijiste Jacinto, en los dos casos siempre devuelve todos los datos y no filtra al seleccionar el combobox.

el SQL despues de introducir en el criterio es :

SELECT Big_table.* FROM Big_table
WHERE (((Big_table.Firm)=IIf(IsNull([Formularios]![Selection].[Formulario]![Cboxfirm]),0,[Firm])));

antes de eso el SQL era 

SELECT Big_table.* FROM Big_table
WHERE Big_table.Firm Like "*" & [Formularios]![Selection]![cboxfirm] & "*";

Quizas estoy obviando algo y me puedan ayudar 

Daniel: Si no recuerdo mal tu tenías un Campo que se llamaba Country. Pues bien saca ese Campo a la consulta y le desmarcas el CheckBox de Visualizarlo.

En Criterios prueba:

SiInm(EsNulo([Formularios]![Seleccion].[Formulario]![CboxFirm]);”ElEden”;[Country])

Ya me contarás. Saludos>> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas