Formulario consulta con filtros múltiples

Nuevamente por aquí. Tengo un pequeño problema que no puedo solucionar, genere un formulario de una consulta, asigne tres combobox independientes para que me realice un filtro en cascada, me funciona bien con el primer filtro, pero al realizar el segundo borra lo primero y filtra de nuevo, y con el tercer filtro la misma situación. Eh buscado y tratado de adaptar unas respuestas que encontré aquí en el foro, como el que realizo el amigo xtreememusic, pero no me dio resultado. Este es mi código.

Private Sub Form_Load()
        Me.CC_RutProv = Empty
        Me.CC_Año = Empty
        Me.CC_Mes = Empty 
End Sub
Private Sub CC_RutProv_AfterUpdate()
On Error Resume Next
Dim SQL As String
        SQL = "SELECT * FROM Consulta_RegistroCompras"
        SQL = SQL & " WHERE Rut_Proveedor Like '*" & Me.CC_RutProv.Text & "*'"
        Form_Consulta_RegistroCompras.Form.RecordSource = SQL
        Me.CC_RutProv.SetFocus
        Me.CC_RutProv.SelStart = 100
Me.CC_Año.RowSource = "select Año FROM Consulta_RegistroCompras where Rut_Proveedor='" & Me.CC_RutProv & "' group by Año"
End Sub
Private Sub CC_Año_AfterUpdate()
On Error Resume Next
Dim SQL As String
        SQL = "SELECT * FROM Consulta_RegistroCompras"
        SQL = SQL & " WHERE Año Like '*" & Me.CC_Año.Text & "*'"
        Form_Consulta_RegistroCompras.Form.RecordSource = SQL
        Me.CC_Año.SetFocus
        Me.CC_Año.SelStart = 100
Me.CC_Mes.RowSource = "select Mes FROM Consulta_RegistroCompras 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_RegistroCompras"
        SQL = SQL & " WHERE Mes Like '*" & Me.CC_Mes.Text & "*'"
        Form_Consulta_RegistroCompras.Form.RecordSource = SQL
        Me.CC_Mes.SetFocus
        Me.CC_Mes.SelStart = 100
End Sub

1 respuesta

Respuesta
1

Si te refieres al filtro que le ayudé a crear en esta consulta: Realizar diferentes filtros sobre un formulario, mucho me temo que no has entendido el procedimiento para hacerlo, además de que tienes alguna cosilla que no es del todo correcta...

El "filtro" tiene que ir encadenando los valores:

Private Sub Form_Load()
        Me.CC_RutProv = Empty
        Me.CC_Año = Empty
        Me.CC_Mes = Empty 
End Sub
Private Sub CC_RutProv_AfterUpdate()
On Error Resume Next
Dim SQL As String
        SQL = "SELECT * FROM Consulta_RegistroCompras"
        SQL = SQL & " WHERE Rut_Proveedor ='*" & Me.CC_RutProv & "*'"
        Form_Consulta_RegistroCompras.Form.RecordSource = SQL
        Me.CC_RutProv.SetFocus
        Me.CC_RutProv.SelStart = 100
Me.CC_Año.RowSource = "select Año FROM Consulta_RegistroCompras where Rut_Proveedor='" & Me.CC_RutProv & "' group by Año"
End Sub
Private Sub CC_Año_AfterUpdate()
On Error Resume Next
Dim SQL As String
        SQL = "SELECT * FROM Consulta_RegistroCompras"
        SQL = SQL & " WHERE Rut_Proveedor ='*" & Me.CC_RutProv& "*' AND "
        SQL = SQL & " WHERE Año ='*" & Me.CC_Año & "*'"
        Form_Consulta_RegistroCompras.Form.RecordSource = SQL
        Me.CC_Año.SetFocus
        Me.CC_Año.SelStart = 100
Me.CC_Mes.RowSource = "select Mes FROM Consulta_RegistroCompras where Rut_Proveedor='" & Me.CC_RutProv & "' AND 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_RegistroCompras"
        SQL = SQL & " WHERE Rut_Proveedor ='*" & Me.CC_RutProv & "*' AND "
        SQL = SQL & " WHERE Año ='*" & Me.CC_Año & "*' AND "
        SQL = SQL & " WHERE Mes ='*" & Me.CC_Mes & "*'"
        Form_Consulta_RegistroCompras.Form.RecordSource = SQL
        Me.CC_Mes.SetFocus
        Me.CC_Mes.SelStart = 100
End Sub

Esto suponiendo varias cosas:

1º/ Que SIEMPRE vas a tener un valor en proveedor antes de escoger el año, y SIEMPRE vas a tener un proveedor y un año antes de escoger el mes. Si no fuera así, tendrías que meter Ifs para actuar en un caso u otro.

2º/ El tercer cuadro combinado depende del valor de los otros dos, y no solo del año (si no se puede dar el caso de que te salgan meses que ese proveedor no tiene registros)

Gracias por responder Sveinbjorn El Rojo, realice lo que me indico pero al generar el primer filtro no muestra nada, le adjunto link de mi base para que puede revisar, algo estoy haciendo mal https://1drv.ms/f/s!AtBUv5HdH1OLlG4_v3wCU36M30_n . De igual forma me dejo pensando en que si quiero realizar los filtros por proveedor o por año?, ya que lo que pretendo en general es cuando haga los filtros necesarios pueda obtener la suma respectiva de las facturas o boletas, por año y mes respectivo según proveedor. Espero puedas ayudarme... Gracias...

http://www.filebig.net/files/24KfBufAf4 

Había algún error por ahí de sintaxis por culpa del copia-pega al código que hice al responderte, pero nada que no debieras ser capaz de ver por ti mismo...

En el archivo que te devuelvo, tienes una copia del formulario en la que aprovecho el procedimiento "Filtrar" que ya tenías programado para, una vez corregido algún detalle (puedes compararlo con el del formulario original para ver las diferencias y errores), usarlo y tener que escribir menos código.

¡Gracias! Sveinbjorn El Rojo, me resulto bien ambos ejemplos que me indicaste, me manejo a nivel medio en la programación VBA, por ello no realice el cambio sutil que me indicaste, pero vamos aprendiendo de a poco. En cuanto al ejemplo de la copia funciona bien pero me perdí en el concepto, pero pretendo aplicarlo en otros formularios futuros. Agradezco tus conocimientos y espero puedas seguir orientándome mas... Saludos y muchas gracias...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas