¿Cómo puedo combinar varios filtros que filtren un subformulario en access 2007?

Antes que nada me gustaría agradeceros todo el bien que hacéis con vuestro sitio. Una gran iniciativa. Y luego espero ser claro en mi pregunta, lamento mconfusión mental. En fin.. Al grano:</span>

Tengo un formulario que alberga un subformulario independiente y en el formulario tengo una serie de combobox y un campo de texto que filtran los resultados del subformulario.

En el formulario hay una decena de combobox que filtran los resultados de la consulta del subformulario a través de la condición, por ej:

Formulaires]![FORacc]![Modifiable13] or [Formulaires]![FORacc]![Modifiable13] Is Null

De este modo los datos del combo "modifiable13" filtran el campo deseado del subformulario. Repitiendo este procedimiento en una decena de combos funciona sin problemas pero hay un par en el que no consigo que los combos filtren. En estés casos opte por filtrar a través de un buildcriteria como el que sigue, ej:

Private Sub Modifiable161_AfterUpdate()

Me.REFOR.Form.Filter = BuildCriteria("DiffMes1110", dbLong, Me.Modifiable161) Me.REFOR.Form.FilterOn = True

End Sub

Estos filtros funcionan pero no filtran simultáneamente con los combos y una vez que filtran anulan los combos

¿Qué puedo hacer para tener todos estos filtros operando al mismo tiempo? ¿Se pueden poner todos con buildcriteria y prescindo de los combos que hacen requery a la consulta del subformulario? ¿Puedo hacer que varios buildcriteria filtren al mismo tiempo?

1 respuesta

Respuesta
1

Creo que lo mejor es poner un botón y en el código de ese botón dar el origen del registros (Recordsource) al subformulario.

Supongamos que el subformulario se llama Sub1 y los cuadros combinados Cuadro1, Cuadro2... los campos por los que quieres filtrar ese formulario los llamaré Campo1, Campo2... y a la tabla Tabla1.

En el código del botón pondrías:

Form!Sub1.Form.Recordsource="Select Campo1, Campo2 from Tabla1 where Campo1='" & Form!Cuadro1.Value & "' or Campo2=.................

Muchas gracias por tu pronta respuesta. tu solución funciona pero hay upequeño problema que no se resolver. Entre los combos que filtraran el subformulario hay uno donde tenemos un rango de valores , de modo que por ejemplo tenemos un campo donde tenemos el numero de ordenes emitidas por un cliente y un combo donde tenemos"entre 0 y 50" ,"entre 100 y 50", entre 100 y 150, etc. que serviría para filtrar por el numero de ordenes emitidas. Una ayudita please. Muchas gracias de nuevo.</span>

Acabo de ver lo que me proponías y no funciona correctamente, o mejor, no es exactamente lo que busco.

En mi formulario tengo, entre otros, un combo con empleados y un combo con comerciales. En el subformulario cada registro es un cliente. Si filtro busco clientes afectados a empleados y comerciales

Un problema es que necesito unir las condiciones con AND porque si lo hago con OR seleccionaría clientes captados por un comercial dado y clientes formados por un empleado dado, cuando lo que busco es seleccionar los clientes formados por los comerciales y empleados referidos en los combos correspondientes. Si pongo AND funciona pero no deja campos nulos, para filtrar no puedo dejar ningún combo en blanco

Espero ser claro. Un saludo y gracias por adelantado

Medio lo conseguí! Seguí tu indicación del botón para filtrar y lo que hice fue poner el código en el botón como sigue:

Form!Sub1.Form.Recordsource="Select * from Tabla1 where Campo1= ((campo1= Formulaires!Sub1!Modifiable1) or (Formulaires!Sub1!Modifiable1 is null)) and ((campo2= Formulaires!Sub1!Modifiable2) or (Formulaires!Sub1!Modifiable2 is null)) and.........;

Funciona bien pero de este modo no se como filtrar los campos de fecha y numéricos. En uno de los campos tengo la fecha de alta del cliente y me gustaría filtrar con un combo donde ponga algo así como altas los últimos 3 meses, altas los últimos 6 meses..... Entre tu pagina y esta genial tu ejemplo con un control calendario: Voy a ver si me sale algo parecido

Luego en otro campo tengo el numero de pedidos por mes, de modo que también me gustaría filtrarlo a partir de un combo done ponga algo así como "mas de 100 pedidos", "mas de 50 pedidos"... Investigo a ver

SI tienes algún consejo soy todo oídos

gracias de antemano experta!

Para los campos de texto:

'" & Form!Cuadro1.Value & "'

Para los numéricos:

" & Form!Cuadro1.Value & "

Para los de fecha:

cDate('" & Form!Cuadro1.Value & "')

Para los rangos:

Campo1 LIKE ... AND ...

Para que sea más de:

Campo1 > ...

Hola de nuevo,

Para el control calendario lo hice como dices y sin problemas, funciona de maravilla. Sin embargo, en el caso de filtrar un campo donde recojo la diferencia en numero de pedidos entre el mes corriente y me da resultados incorrectos.

Para filtrar este campo puse dos combos modifiableX et modifiableY con valores de -300 a 300 en cada uno. Así si seleccionamos en modifiableX -20 y en modifiableY -50 deberíamos obtener registros en los que hayan hecho como mínimo 20 pedidos menos en mes corriente y como máximo 50 menos en el mes corriente.

Para ello anadi lo siguiente al código del botón:

Form!Sub1.Form.Recordsource="Select * from Tabla1 where Campo1= ((campo1= Modifiable1) or (Modifiable1 is null)) and.........and ((DiffMes1110 < modifiableX ) and (DiffMes1110 > modifiableY)))

También intente con:

Form!Sub1.Form.Recordsource="Select * from Tabla1 where Campo1= ((campo1= Modifiable1) or (Modifiable1 is null)) and.........and ((DiffMes1110) between (modifiableX ) and (modifiableY)))

En ambos casos los resultados que obtengo no son correctos. Se te ocurre algo?

Muchas gracias por adelantado. He avanzado muchísimo en un proyecto que tenia muy atascado.

Saludos

No entiendo bien como tienes planteado el tema... ¿el nº de pedidos por mes lo tienes totalizado en un solo registro?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas