Agregue un tercer combobox de búsqueda y dar problema

Sigo aprendiendo a través de su ayuda. Resulta que sigo con mi data y en un formulario utilizo dos combobox para filtrar registros por Año y por Mes, gracias a la ayuda de Don Eduardo y Julián que me orientaron a la perfección funcionan a la pinta ya sea por medio de una tabla directamente como de una consulta en un Formulario.

Pues bien se me ocurrió agregar un tercer Combobox, del cual quiero filtrar por categoría (Boleta, Factura, Nota Crédito), logro realizar el filtro primero por la CATEGORÍA, luego el AÑO, pero por el MES me pide que vuelva a introducir el valor del parámetro CATEGORÍA y funciona pero se puede arreglar que no pida volver a ingresar el parámetro?

Private Sub CC_Tipo_AfterUpdate() 'PRIMER COMBO BUSCADOR
Me.RecordSource = "SELECT * FROM  Tabla_LibroCompras where TipoDocumento like '" & Me.CC_Tipo.Value & "'"
End Sub
Private Sub CC_Año_AfterUpdate() 'SEGUNDO COMBO BUSCADOR
Me.RecordSource = "SELECT * FROM Tabla_LibroCompras where year([FechaCompra])= " & Me.CC_Año & " and TipoDocumento like '" & Me.CC_Tipo.Value & "'"
End Sub
Private Sub CC_Año_GotFocus() 
Me.CC_Año.Requery
End Sub
Private Sub CC_Mes_AfterUpdate() ' TERCER BUSCADOR
Me.RecordSource = "SELECT * FROM Tabla_LibroCompras where year([FechaCompra])= " & Me.CC_Año & " and TipoDocumento =" & Me.CC_Tipo.Value & " and format([FechaCompra],""mmmm"") like '" & Me.CC_Mes & "'"
End Sub
Private Sub CC_Mes_GotFocus()
Me.CC_Mes.Requery
End Sub

2 Respuestas

Respuesta

Te acabo de mandar un ejemplo de filtro múltiple

Respuesta

El problema que tiene se debe a que en el código del tercer cuadro combinado (CC_Mes_AfterUpdate), al actualizar la fuente de datos del formulario, la referencia a CC_Tipo.Value no es válida porque en la consulta SQL está tratando el campo TipoDocumento como un valor numérico en lugar de una cadena de texto.

Errores en el código actual

Error de concatenación de cadena:
En el tercer filtro, TipoDocumento es una cadena de texto, por lo que debe estar encerrado entre comillas simples (').
Uso incorrecto de Format([FechaCompra], "mmmm"):
Access puede tener problemas con el formato de la fecha en consultas SQL dinámicas. Es mejor usar Month([FechaCompra]).
Falta de persistencia de los filtros anteriores:
Cuando actualiza Me. RecordSource, se sobrescribe la consulta anterior en lugar de mantener los filtros aplicados.

Solución Mejorada

Private Sub CC_Tipo_AfterUpdate() 'PRIMER COMBO BUSCADOR
    Me.RecordSource = "SELECT * FROM Tabla_LibroCompras WHERE TipoDocumento LIKE '" & Me.CC_Tipo.Value & "'"
    Me.Requery
End Sub
Private Sub CC_Año_AfterUpdate() 'SEGUNDO COMBO BUSCADOR
    Me.RecordSource = "SELECT * FROM Tabla_LibroCompras WHERE TipoDocumento LIKE '" & Me.CC_Tipo.Value & "' AND Year([FechaCompra])= " & Me.CC_Año.Value
    Me.Requery
End Sub
Private Sub CC_Mes_AfterUpdate() 'TERCER COMBO BUSCADOR
    Me.RecordSource = "SELECT * FROM Tabla_LibroCompras WHERE TipoDocumento LIKE '" & Me.CC_Tipo.Value & "' AND Year([FechaCompra])= " & Me.CC_Año.Value & " AND Month([FechaCompra])= " & Me.CC_Mes.Value
    Me.Requery
End Sub

Explicación de las correcciones

LIKE '" & Me.CC_Tipo.Value & "'"

Se mantiene LIKE para hacer coincidencias parciales si fuera necesario.
Se asegura que TipoDocumento sea tratado como cadena (encerrado en ').
Corrección en el mes (Month([FechaCompra]) en lugar de Format([FechaCompra], "mmmm"))

Format([FechaCompra], "mmmm") devuelve el nombre del mes como texto, lo cual puede generar errores al comparar con CC_Mes si este contiene números.
Se cambia a Month([FechaCompra]), que devuelve el número del mes (1-12).
Se agrega Me. Requery después de cada actualización

Esto hace que el formulario se actualice correctamente después de cambiar el valor de cada combobox.

Notas adicionales

Asegurar que CC_Mes tenga valores numéricos:
Si CC_Mes tiene valores en formato texto (Enero, Febrero, etc.), tendrá que cambiar su origen de datos a valores numéricos (1, 2, 3, ... 12) para que coincida con Month([FechaCompra]).
Si CC_Tipo puede estar vacío, hay que manejarlo:
Si quiere que funcione también cuando CC_Tipo está vacío, use:

WHERE (TipoDocumento LIKE '" & Me.CC_Tipo.Value & "' OR '" & Me.CC_Tipo.Value & "' IS NULL)

Con estas correcciones, el tercer filtro no le pedirá que vuelva a introducir CC_Tipo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas