Dejar en blanco campos en formulario para consulta de selección y que aparezcan todos los registros

Tengo una tabla "Comunicaciones" con los campos "Ámbito", "Propiedad", "Cliente". Tengo una consulta de selección "Seleccion_comunicaciones", mostrando todos los campos de la tabla y establezco los criterios de selección mediante los valores introducidos en un formulario independiente "selección" con tres cuadros combinados "selambito", "selpropiedad" y "selcliente" que toman los datos de las tablas "ámbitos", "propiedades" y "clientes" respectivamente. En los criterios de selección de los campos de la consulta pongo [Formularios]![selección]![selambito] para el campo "Ámbito", [Formularios]![selección]![selpropiedad] para el campo "Propiedad" y [Formularios]![selección]![selcliente] para el campo "Cliente". De esta manera , si en el formulario dejo alguno de los cuadros combinados en blanco, entonces no aparece ningún registro. La pregunta es como hacer para que dejando alguno o todos los cuadros combinados en blanco, aparezcan todos los registros en vez de ninguno.

1 Respuesta

Respuesta
1

Después de muchas vueltas intentando filtrar la consulta como tu quieres (y porque quería saber si se podía hacer así), no he conseguido nada.

Pero te planteo otra opción por si la ves útil:

1º/ Borra los 3 criterios de tu consulta

2º/ Crea, usando el asistente, un formulario sobre esa consulta, eligiendo cuando te pregunte por la distribución "Hoja de Datos" (esto lo hago así para que el resultado sea lo más parecido a una consulta, también podrías usar "Tabular"). Para el código que te pondré, lo llamaré como tu consulta: "Seleccion_comunicaciones"

3º/ En tu formulario independiente, supongo que tendrás un boton que es el que te abría la consulta. Pues en ese boton, vas a sus propiedades, y en la pestaña eventos, vas a Al hacer Click, le das al boton de los 3 puntos de la derecha, seleccionas "generador de código", y le escribes este código, entre las lineas Private sub y end sub:

'Declaras las variables

Dim miFiltro As String

Dim miAmbito As Variant

Dim miPropiedad As Variant

Dim miCliente As Variant

'Coges los valores del los combos

miAmbito=Nz(Me.selambito,"")

miPropiedad =Nz(Me.selpropiedad,"")

miCliente=Nz(Me.selcliente,"")

'Inicializas el filtro

miFiltro=""

'Creas el filtro por partes:

If miAmbito<>"" Then

miFiltro = " AND [Ámbito]='" & miAmbito & "'"
End If

If miPropiedad<>"" Then
miFiltro = miFiltro & " AND [Propiedad]='" & miPropiedad & "'"
End If

If miCliente <>"" Then
miFiltro = miFiltro & " AND [Cliente]='" & miCliente & "'"
End If

'Rectificas el filtro para quitarle el primer " AND "

If Len(miFiltro) > 0 Then
miFiltro = Right(miFiltro, Len(miFiltro) - 5)
End If

'Abres el formulario filtrado

DoCmd. OpenForm "Seleccion_comunicaciones", acFormDS,, miFiltro

Una puntualizacion:

Como no sé que tipo de datos usas, declaré todas las variables como Variant, y luego las usé como si el dato fuera de texto.

Si alguno de tus cuadros combinados (o todos) toman un valor numérico, por ejemplo un ID de cliente, tienes que cambiar esta parte:

[Cliente]='" & miCliente & "'"

por esta otra:

[Cliente]=" & miCliente

Gracias experto.

Hoy estoy de viaje, mañana lo pruebo y te diré como va.

Un saludo

Muchas gracias experto. ¡Tu solución ha funcionado perfectamente! Únicamente he tenido que quitar una tilde del código y ya está. Era exactamente lo que quería.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas