¿Como hacer funcionar opción "todos" en cuadro combinado?

Tengo un combo "estudiantes" que realiza filtro por nombre apellido y también un combo "año" -basado en campo fecha_inscripción_anual- que filtran en un subformulario la trayectoria educativa del estudiante según el año. Mediante la consulta sql de origen de fila del combo "año" realicé una UNION SELECT que me permitió agregar la categoría "todos" a la opción de la lista desplegable así:

SELECT DISTINCT TRAYECTORIA_ESCOLAR.fecha_inscripcion_anual FROM TRAYECTORIA_ESCOLAR UNION SELECT "Todos" FROM TRAYECTORIA_ESCOLAR GROUP BY TRAYECTORIA_ESCOLAR.fecha_inscripcion_anual;
En el formulario en cuestión el combo año me despliega ahora la opción "todos" en la lista junto a los años 2020, 2021, 2022, 2023, 2024 (valores del campo fecha_inscripcion_anual) pero no encuentro el modo que ejecute la consulta mostrando a todos esos valores en relación al estudiante seleccionado- Sólo funciona el filtro por cada año.

3 respuestas

Respuesta
1

Emiliano no se deje confundir, escríbame a [email protected] y si puede adjunte la base de datos en RAR. De todas maneras, le tengo el respectivo código

Respuesta

Con eso solo se logra la selección pero 'todos' no es un dato de fecha y lógicamente dará error (o directamente no funciona).

Donde hay que hacer la modificación es el destino del dato y esa parte no se conoce (de momento).

La modificación puede ser tan sencilla como cambiar 'Todos' por un asterisco (*), conocida la consulta se podrá adaptar para que si recibe 'Todos' lo pueda cumplir (aunque lo mas sencillo pueda ser eliminar la condición directamente)

Con (*) ya había probado también. Me faltaría el código que de el contenido similar al "seleccionar todo" del filtro tradicional. El combo es de búsqueda para mostrar información ya cargada. No comprendo lo del destino del dato. Disculpas gracias por respuesta. El dato se genera en tabla trayectorias que tiene un campo fecha_inscripcion con valor predeterminado =Año(fecha()). El combo pretende filtrar registros por año o mostrar todos los registros (años) en subformulario.

Para poder aplicar el asterisco como opción alternativa (la ambigüedad) es necesario conocer como se esta utilizando el dato que proporciona el combo.

La forma mas sencilla de aplicarlo implica modificar el combo, esto es:

Añadir una columna mas para utilizar una como elemento 'visual' (se muestra el año y la opción 'Todos' y en la segunda columna (que permanece oculta) el dato que devuelve el combo al seleccionar uno de sus elementos, para los años el mismo dato y para la opción 'Todos' un asterisco.

De no ser así aparece lo del 'destino del dato' que se refiere a 'donde se utiliza' el dato que se obtiene del combo (una consulta un filtro ...).

En una consulta se puede utilizar la funcion IIF(equivale al convencional IF ... Then ... Else) de forma que si la opción que devuelve es 'Todos' devuelva un asterisco (y si no lo es el dato original), algo como:

IIF([el-combo] <> "Todos", [el-combo], "*")

Si se utilizase para aplicar un filtro en el formulario seria mas sencillo, el formulario permite aplicar o no aplicar el filtro (activarlo/desactivarlo), el método:

Me.FilterOn = [el-combo] <> "Todos"

Con un año seleccionado  ==> ([el-combo] <> "Todos") = TRUE ===>>> Me.FilterOn = TRUE

Si se selecciona 'Todos'  ==> ([el-combo] <> "Todos") = FALSE  ===>>> Me.FilterOn = FALSE

Por ello es importante conocer donde se utiliza para poder aconsejar el método optimo para aplicar el adecuado (que será aquel que menos distorsione lo que actualmente funciona).

Hola, el combo se utiliza en un encabezado de formulario para filtrar los datos que se muestran en un subformulario que está en el detalle. ¿Cómo se estructura el método Me.FilterOn en lenguaje VBA y en que evento en ese caso?

Si el filtro se aplica en un subformulario, solo se necesita ajustar la ruta.

Los filtros del formulario funcionan con dos parámetros, uno es la condición (la igualdad a cumplir) y el otro es si se activa o no se activa (que es mas sencillo que borrar y escribir la condición).

'Me' hace referencia al formulario en que corre el código y permite que las rutas sean relativas en lugar de absolutas.

Para referirse a un formulario (en funciones de subformulario) solo hay que indicárselo a Access añadiéndole la palabra reservada 'Form':

El filtro aplicado al formulario principal:

Me.Filter = "Año = " & Me.[nombre del combo]
El mismo filtro aplicado a un subformulario que se llamase 'Reservas':
Me.Reservas.FORM.Filter =   "Año = " & Me.[nombre del combo]

(Me ==> los objetos son locales)
(Reservas ==> el nombre del objeto subformulario)
(FORM ==> el indicador de que no es un cuadro de texto o combo: es un formulario)

(Filter ==> la propiedad del formulario que contiene la condición)

Se puede referenciar a cualquier propiedad, por ejemplo el indicador de que el filtro esta activo o inactivo (FilterOn):

Me.Reservas.FORM.FilterOn =  True (-1) // False (0)

Access interpreta al cero como FALSE, a cualquier otro valor diferente de cero como TRUE

En el evento en el que se evalúe el dato del combo y se genere la condición en base al año se pueden dar dos opciones o es un año (numero) o el texto 'Todos'.

Si comparamos el valor que devuelve el combo (un numero de año o el texto 'Todos') con 'TODOS' se obtiene una de dos respuestas:

.- Se cumple (True)
.- No se cumple (False)
La respuesta es perfectamente valida para activar el filtro y el código quedará así:

Me.Reservas.FORM.Filter =   "Año = " & Me.[nombre del combo]

Me.Reservas.FORM.FilterOn =  Me.[nombre del combo] <> "Todos"

La primera línea genera el filtro a aplicar, la segunda lo aplica.

(Si el combo devuelve 'Todos' la condición no se cumple, el resultado será FALSE: el filtro no se aplica y mostrara todos los años)

Respuesta

Para que la opción "todos" funcione correctamente en tu combo "año" y muestre todos los registros independientemente del año seleccionado, puedes modificar la consulta That's Not My Neighbor SQL de origen de fila del combo "año" para incluir una condición que verifique si se ha seleccionado la opción "todos".

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas