Borrar columnas vacías de una consulta

De antemano quiero felicitar esta web puesto que he aprendido muchísimo con ella. Mi pregunta es la siguiente:
Tengo una consulta creada a partir de los campos de una tabla que se insertan según si se ha activado o no una casilla de verificación en un formulario, es decir, con un SELECT IFF. El caso es que funciona correctamente pero el resultado es una tabla donde hay columnas en blanco procedentes de aquellas casillas que no están activadas. Se trata de hacer un filtro en el que la información que aparezca sea solamente aquella que se elija en el formulario y la idea es que no aparezcan esas columnas en blanco.
Mi idea era hacer una consulta sobre la anterior diciendo que escoja solamente aquellos campos que no sean nulos pero no lo consigo. Hay que tener en cuenta que las columnas vacías son diferentes en cada ocasión según la selección del usuario.
¿Alguna idea? Soy aún novato en todo esto.

1 respuesta

Respuesta
1
Lo que tienes que hacer es por código montar el where que te interese, si el campo es diferente de nulo, lo añades al where, y si es nulo o vacío, no lo pones.
De todas formas, tampoco entiendo muy bien como lo tienes montado,
¿Me puedes detallar con un ejemplo lo que quieres hacer?
Disculpa por no haber sido lo suficientemente clara. El ejemplo es el siguiente:
He diseñado una consulta con la siguiente instrucción SQL:
SELECT IIf([Forms]![QBF_Form]![infor1]<0,[DNI],Null) AS ["DNI"]
FROM QBF_Queryc;
Donde infor1 en la información que proporciona una casilla de verificación de un formulario y QBF_Queryc es la tabla de donde se selecciona la columna. El hecho es que si la casilla está activada el resultado es una tabla con un campo llamado "DNI" donde se insertan los valores de la columna DNI de la tabla QBF_Query. Por el contrario, si la casilla no está activada se crea también la columna "DNI" pero con los registros nulos. Yo lo que quiero es que si la casilla no está activada no inserte dicha columna. Esto es solo uno de los campos. La instrucción SELECT que uso tiene 7 campos más con el mismo tipo de instrucción IIf. Puesto que no sabía como evitar que se insertaran los valores nulos mi idea era hacer otra consulta sobre esta que eliminara las columnas en blanco pero no sé cómo hacerlo. Mi nivel de Access no da para más.
Muchas gracias por tu paciencia y tu interés.
Para eso lo que tienes que hacer es modificar la consulta según los campos que quieras ver.
¿Esta consulta es para abrirla en un formulario tipo datos?
Por visual basic puedes modificar la consulta a tu gusto y luego asignársela al form, para que salgan solo las columnas que te interesan.
La consulta la abro desde un formulario al pulsar un botón a través de una macro. De visual basic no tengo ni idea. ¿Podrías ser más explicito? Algún ejemplo simplemente como decir que si el valor de la casilla de verificación es 0 que no seleccione ninguna columna.
Muchas gracias
Lo que necesitas es montar una consulta diferente según la selección, si no sabes visual basic se complica mucho el tema. Me puedes decir que hace exactamente la macro, edítala y descríbeme lo que ejecuta.
¿Ya has solucionado el problema?
Si no enviame lo que te pido, si ya lo has solucionado
Aún no lo he resuelto. Esperaba alguna idea. La macro lo único que hace es abrir la consulta y en ella está el SELECT IIf que te comenté anteriormente. Si tienes alguna sugerencia más y si no muchas gracias de todas formas por el interés.
Lo primero sera crearte una consulta básica con nombre MostrarConsulta (por ejemplo)
y query sql SELECT * FROM QBF_Queryc
Lo que puedes hacer es desde el botón que ejecuta la macro, quitar la macro y poner que ejecute código de visual basic.
Vas al código de visual basic que te pone y copias lo que te pongo, modificando a tu gusto
    Dim stDocName As String
Dim sSQL as string
ssql = ""
If [Forms]![QBF_Form]![infor1]<0 then
ssql = ssql & "[DNI] AS DNI"
end if
If [Forms]![QBF_Form]![infor2]<0 then
if ssql <> "" then ssql = ssql & ", "
ssql = ssql & "[Nombre] AS Nombre
end if
ssql = "SELECT " & ssql & " FROM QBF_Queryc"
    stDocName = "Mostrarconsulta"
    CurrentDb.QueryDefs(stDocName).SQL = sSQL
    DoCmd.OpenQuery stDocName, acNormal, acEdit
'copia lo anterior en el codigo de click del boton cambiando los if que te he puesto por los reales de tu consulta y los nombres de formulario correctos,
a ver si con esto lo consigues
Muchas gracias por el ejemplo. Más o menos entiendo la idea y es exactamente lo que quería hacer pero me sale un error, que es el siguiente:
Se ha producido el error '3141 en tiempo de ejecución.
La instrucción SELECT incluye una palabra reservada, le falta un argumento o está mal escrito, o bien los signos de puntuación no son correctos.
Le he dado a depurar y se va a la línea:
CurrentDb.QueryDefs(stDocName).SQL= sSQL
¿Tienes alguna idea de cuál puede ser el problema?
Perdona por ser tan pesada pero no sé nada de visual basic. De nuevo muchas gracias por tu ayuda.
Tienes mal montado la consulta select,
Enviame la función que has montado entera y el contenido de la variable sSQL
que es la que esta mal escrita,
para mirar el valor, cuando te de el error le das a depurar.
Pulsa Ctrl+G y te aparece una ventana de inmediate, en ella escribe
? SSQL y pulsa intro, te aparecerá el contenido del campo, pásamelo y te digo aunque esta mal escrito.
Muchísimas gracias, ya lo he conseguido, vaya lata que te he dado. Al final he aprendido un poco de visual basic, genial. El último problema que tenía surgía cuando no se picaba ninguna información en las casillas de verificación, que entonces sSQL estaba vacío y daba error en SELECT. Simplemente metiendo un último If lo he solucionado.
Muchísimas gracias no lo hubiera conseguido sin tu ayuda. Te animo a que sigas ayudando a la gente como experto.
Gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas