|
Buenos días. Estoy intentando hacer un buscador en un formulario, pero llevo varios días, y no doy con una posible solución.
Tengo esto:
https://www.dropbox.com/s/jmc4yg5m8qs2jwt/ScreenShot001.jpg?dl=0" rel="nofollow - https://www.dropbox.com/s/jmc4yg5m8qs2jwt/ScreenShot001.jpg?dl=0
Me voy a centrar en los desplegables, no en los checkboxes, que también uso para filtrar. Creo que si saco los desplegables, no me costará incluir los checkboxes.
Hay tres posibles filtros:
Estado > Formato > Género > Subgénero Año Añadido > Mes Añadido Año Leído > Mes Leído
Para simplificarlo más, y que la respuesta sea más sencilla, cojamos solo los dos primeros (estado y año añadido).
Quiero que, si elijo un estado, me muestre solo los registros relacionados del año añadido, y al revés, es decir, que si elijo un año añadido, me muestre los registros relacionados del estado. Además, que luego me permita filtrar los desplegables que dependan de estos (a saber, formato, que depende de estado; y mes añadido, que depende del año añadido)
Por último, quiero añadir en cada desplegable una segunda columna con el número de valores de cada opción. Así:
https://www.dropbox.com/s/uhum6muftz1hchn/ScreenShot002.jpg?dl=0" rel="nofollow - https://www.dropbox.com/s/uhum6muftz1hchn/ScreenShot002.jpg?dl=0
¿Cómo he intentado hacerlo?
La manera de conseguirlo que había pensado era utilizando la columna con el número de registros. De esta forma, en la consulta origen del desplegable le pondría una condición de que solo mostrara los que fueran mayor que cero, y ya lo tendría.
Ahora bien, ¿cómo consigo ese valor para la segunda columna del desplegable?
Tengo este código:
Function Veces(Tipo As String, Filtro As String) As Integer Dim myFilter1 As String Dim rst As DAO.Recordset Dim Veces1 As String FilterCombo Tipo, Filtro, "Buscador" Veces1 = "SELECT Count(CQuery.Titulo1) AS Veces" _ & " FROM (" & myRecordSource & ") As CQuery" _ & IIf(myFilterCombo = "", "", " WHERE " & myFilterCombo & "") Set rst = CurrentDb.OpenRecordset(Veces1) If Not (rst.EOF And rst.BOF) Then Veces = rst("Veces") End If rst.Close Set rst = Nothing End Function
Y esa función FilterCombo es esta:
Sub FilterCombo(Tipo As String, Filtro As String, Optional Formulario As String = "") myFilterCombo = "" Select Case Formulario Case "Buscador" If Tipo = "Estado" Then If myFilterCombo <> "" Then myFilterCombo = myFilterCombo & " And " myFilterCombo = myFilterCombo & Filtro End If End Select
If Tipo = "AñoAñadido" Then If myFilterCombo <> "" Then myFilterCombo = myFilterCombo & " And " myFilterCombo = myFilterCombo & Filtro End If End Sub
He de decir que AñoAñadido no es un campo de la tabla, sino que lo calculo en función de la fecha.
Cuando lo hago de esa manera, la segunda columna con el número de registros del segundo desplegable me muestra como si no hubiera aplicado filtro alguno. En la imagen, el número de registros del formulario son dos después de haberle aplicado el filtro del estado, pero en el desplegable del año añadido me muestra todos (en este caso, me tendría que salir solo 2019 - 2)
https://www.dropbox.com/s/uu20hy38safts6j/ScreenShot003.jpg?dl=0" rel="nofollow - https://www.dropbox.com/s/uu20hy38safts6j/ScreenShot003.jpg?dl=0
Otra cosa que desearía conseguir es que, cuando elija un valor de este segundo desplegable y vuelva a entrar para elegir otra opción, efectivamente me salgan todas las opciones. Es decir, si escojo el Estado Comprar, y para el desplegable Año Añadido me dice que solo están disponibles los años 2019 y 2020, que cuando elija 2019, al volver a desplegar me aparezcan los dos años, y no solo el que he elegido.
No sé si habrá otra opción más sencilla. Yo creo que esta que planteo no es demasiado complicada. Donde tengo el problema es a la hora de crear el filtro para la segunda columna con el número de registros.
¿Alguien podría ayudarme?
¡Gracias!
|