Filtrar subformularios por varios campos desde formulario

Tengo un formulario con 2 subformularios. Tengo varios campos combinados e independientesen el formulario principal para filtrar los datos de los subformularios al darle a un botón.

Los filtros son muy variados: numéricos, de texto y coincidencia exacta, de texto sin coincidencia exacta, valor entre dos números...

Hasta ahora tengo algo parecido en un formulario con la función "DoCmd.ApplyFilter" pero no tengo ni idea de cómo filtrar los subformularios.

Me resultaria más sencillo hacerlo con vba pues ya consigo filtrar por varios campos diferentes a la vez un formulario aunque no tengo ni idea de como hacerlo.

1 Respuesta

Respuesta
1

Creo que lo mejor es dar el origen del registro del subformulario al hacer clic en los cuadros combinados.

Sería algo parecido a lo que tengo en la página: http://angelessebas.es/

En el apartado supuestos y soluciones ---> subformularios ---> Formulario para seleccionar el Proveedor y Subformulario para ver los pedidos de ese Proveedor

Échalo un vistazo para ver si te sirve y me cuentas.

Estimado experto:

Soy un poco novata en esto y puede que no vea las coincidencias pero creo que mi caso es un poco diferente.

Tengo varios campos para filtrar:

- calidad,

- cant.min y cant. máx,

- descripción,

- color,

- ubicación,

- id_ficha... que pueden utilizarse a la vez o no para ir realizando búsquedas sobre los subformularios.

Los subformularios son iguales pero uno muestra los registros "disponibles" y el otro "bloqueados".

No acabo de ver cómo utilizar lo anterior, probablemente por mis limitaciones. Si puedes explicarme un poco más me harías un favor. Muchas gracias por anticipado.

¿Puedes indicarme como lo tienes planteado...?

Supongo que la tabla tiene los campos Calidad, Cantidad, Descripción, Color, Ubicación e Id_Ficha ¿es así?

Y que los valores de estos campos los tienes en distintos cuadros combinados ¿correcto...?

Además tendrás otro campo que nos dé el estado (disponible o bloqueado) para hacer el primer filtro del subformulario correspondiente.

Es decir filtras los disponibles y los visualizas en un subformulario, haciendo lo mismo con los bloqueados...

Después estos subformularios los quieres filtrar por los campos arriba expuestos...

Dime si lo tienes así planteado o no...

Exactamente, el único detalle es que no todos los campos de los subformularios vienen de una tabla sino de una consulta de varias tablas .

Subo un pantallazo del formulario. Supongo que con esto estará todo claro:

https://dl.dropboxusercontent.com/u/69224142/form.png

Muchas gracias por anticipado

Lo que tienes que hacer es dar el origen del registros de los subformularios desde la acción al hacer clic de los cuadros combinados.

Te explico, en el origen del registro de los subformularios tendrás el nombre de la tabla o consulta en el que los basas, pero en vez del nombre se puede poner la sql de esa consulta (la sql la ves en la forma sql de la consulta, que se puede elegir en la esquina superior izquierda con la consulta en modo diseño (en access 2003, supongo que en las otras versiones será igual)

La sql será de la forma SELECT nombre de los campos separados por comas FROM nombre de la tabla WHERE condición para filtrar.

Vamos a ver, por ejemplo, como sería el filtro por el cuadro combinado en el que seleccionas la calidad, a este cuadro lo llamaré selCalidad. En sus propiedades, en la acción Al hacer clic ---> picas en la flecha de la derecha y eliges Procedimiento de Evento ---> picas en el cuadrado de los ... para abrir el generador de código y pones el código siguiente:

Forms!Almacen!SubDisponibles.Form.RecordSource = "Select * from Productos where calidad=form!selcalidad.value and disponible=true"

He llamado:

Almacen ---> al formulario

SubDisponibles ---> al subformulario de disponibles

Productos ---> a la tabla

Calidad, disponible ---> a los campos de la tabla Productos

Lo que he hecho ha sido dar el origen del registro (RecordSource) del subformulario subDisponibles que está en el formulario Almacen

Me cuentas.

ok, muchas gracias. Entiendo lo que me propones y he conseguido que me funcione. El problema es que dista un poco de las necesidades que tengo yo ya que necesito filtrar por varios campos simultáneamente.

Podría colocarlo en el botón de búsqueda e incluir varios campos a la vez pero se me presenta el problema es que si el cuadro combinado está vacío no quiero que ejecute la búsqueda. ¿Se podría utilizar algo similar al vba:?

like '*" & cali & "*'

En este caso sólo me filtra cuando hay un valor en el cuadro combinado.

Por último tengo una duda que seguro es una tontería pero no sé como solucionar:

Cómo anulo la búsqueda. Siempre he gastado el RemoveAllFilters pero ahora ya no tengo filters que quitar y no sé cómo hacerlo con el sql.

Ya sé que estoy abusando un poco pero voy bastante perdida aunque lo de utilizar el RecordSource me va a venir genial. Había leído algo del tema pero no me aclaraba.

Muchas gracias y espero no molestarte más

Efectivamente si quieres filtrar por varios cuadros a la vez y que una vez sean por unos y otra por otros, tendrás que utilizar el like en vez de =, no hay ningún problema.

Para deshacer la búsqueda, creo que lo mejor es poner todos los valores de los cuadros combinados a null:

Form!selCalidad.Value=Null

Muchas gracias.

Voy a ir probando y espero me funcione. No se me ocurre como lo habría hecho sin tu ayuda.

Un cordial saludo, atentamente. Mª José

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas