Problema al segundo Filtro en un Formulario Lista

Mucho tiempo fuera de la red... Estoy retomando unos programas y me encontré con un problema. Tengo un formulario lista en Access 2016 que depende de una consulta "Consulta_ListadoCompras" hecha de una tabla de registros. En la consulta genere campos de Año, Mes y Numero del Mes(NunMes), registro que tomo del campo "FechaCompra" de dicha consulta, esto para poder agruparlos conforme al criterio de búsqueda.

Genere dos combobox independientes de donde obtengo los datos de la misma "Consulta_ListadoCompras" y le agregue los siguientes comandos después de actualizar

Private Sub CC_Año_AfterUpdate()
 On Error Resume Next
 Dim SQL As String
        SQL = "SELECT * FROM Consulta_ListadoCompras"
        SQL = SQL & " WHERE Año Like '*" & Me.CC_Año.Text & "*'"
        Form_ListadoLibroCompras.Form.RecordSource = SQL
        Me.CC_Año.SetFocus
        Me.CC_Año.SelStart = 100
Me.CC_Mes.RowSource = "SELECT Mes FROM Consulta_ListadoCompras WHERE Año = '" & Me.CC_Año & "' GROUP BY Mes"
End Sub
Private Sub CC_Mes_AfterUpdate()
 On Error Resume Next
 Dim SQL As String
        SQL = "SELECT * FROM Consulta_ListadoCompras"
        SQL = SQL & " WHERE Año = '*" & Me.CC_Año & "*' AND "
        SQL = SQL & " WHERE Mes = '*" & Me.CC_Mes & "*'"
        Form_ListadoLibroCompras.Form.RecordSource = SQL
        Me.CC_Mes.SetFocus
        Me.CC_Mes.SelStart = 100
End Sub

El primer filtro del cuadro combinado "Año" me resulta perfecto filtrando los registros por año en el formulario y en el cuadro combinado "MES" me deja los registros de los meses, pero al filtrar al mes que quiero no lo realiza.

Respuesta
1

En la consulta sobre el mes, hay dos Where (uno por cada condición) y sobra el segundo Where, no la condición (por ello el error).

Si se comentase la primera línea ( On Error Resume Next) se apreciara el error.

Si las líneas:

SQL = SQL & " WHERE Año = '*" & Me.CC_Año & "*' AND "
SQL = SQL & " WHERE Mes = '*" & Me.CC_Mes & "*'"

Las modificases así lo apreciarías mejor:

SQL = SQL & " WHERE Año = '*" & Me.CC_Año & "*' AND Mes = '*" & Me.CC_Mes & "*'"

¡Gracias! Enrique por su ayuda, no me resulto mucho ya que no me entregaba la información que quería, pero me guio en otro camino a otras consultas en mi base.

1 respuesta más de otro experto

Respuesta
1

El problema radica en la construcción de la consulta SQL en el evento CC_Mes_AfterUpdate. Hay varios errores en la concatenación de la cadena SQL y en el uso de los operadores. Aquí hay una solución ajustada para corregir los errores y lograr el comportamiento esperado.

Problemas detectados:

Uso incorrecto del operador LIKE con comillas y asteriscos (*). Esto no es necesario en este caso, ya que estás buscando una igualdad exacta.

Doble cláusula WHERE en la consulta del evento CC_Mes_AfterUpdate. Esto genera un error de sintaxis en SQL.

Inconsistencia en el uso de los valores del cuadro combinado Me.CC_Año y Me.CC_Mes.

Solución ajustada:

Modifiqué el código para construir correctamente las consultas SQL.

Private Sub CC_Año_AfterUpdate()
    On Error Resume Next
    Dim SQL As String
    ' Filtra el formulario por el año seleccionado
    SQL = "SELECT * FROM Consulta_ListadoCompras WHERE Año = '" & Me.CC_Año.Text & "'"
    Form_ListadoLibroCompras.Form.RecordSource = SQL
    ' Actualiza el RowSource del cuadro combinado de meses
    Me.CC_Mes.RowSource = "SELECT Mes FROM Consulta_ListadoCompras WHERE Año = '" & Me.CC_Año.Text & "' GROUP BY Mes"
    Me.CC_Mes.Requery
End Sub
Private Sub CC_Mes_AfterUpdate()
    On Error Resume Next
    Dim SQL As String
    ' Filtra el formulario por el año y mes seleccionados
    SQL = "SELECT * FROM Consulta_ListadoCompras WHERE Año = '" & Me.CC_Año.Text & "' AND Mes = '" & Me.CC_Mes.Text & "'"
    Form_ListadoLibroCompras.Form.RecordSource = SQL
End Sub

Cambios realizados:

Eliminación del operador LIKE. Para este caso, es mejor usar comparaciones exactas con el operador =. El operador LIKE es más útil para patrones y búsquedas parciales.

Corregido el doble WHERE en la consulta del evento CC_Mes_AfterUpdate. Esto causa un error de sintaxis en SQL.

Asegúrese de que las variables del cuadro combinado (Me.CC_Año y Me. CC_Mes) están siendo utilizadas correctamente.

Consideraciones:

Formato de los datos: Asegúrese de que los campos Año y Mes en la consulta están siendo tratados como cadenas si es necesario. Si son campos numéricos, elimine las comillas simples (') al concatenar. Consultas SQL.

Hola Don Eduardo, gracias por responder... realice los cambios que usted me indico pero sigo con el problema en el segundo filtro. Lo realiza pero no me muestra los datos, en los capos de registro me muestra #¿Nombre?

Si no hay problema envíeme la base de datos a [email protected] en formato comprimido RAR y trato de colaborarle. Favor en el asunto anotar su pregunta

¡Gracias! Eduardo, me ayudo mucho su ayuda, aprendí nueva forma de realizar una consulta menos complicada, solo acomode los comandos a mi necesidad, ya que también necesitaba filtrar la información por año y si requería más filtro por mes. Muchas gracias por su ayuda

Excelente, le alegro le haya servido.

Feliz año

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas