Filtros en formularios

Hola buen día, tengo un formulario con 5 cuadros independientes que al escribir sobre alguno de ellos, filtra en un subformulario lo escrito en ese cuadro, pero al borrar lo que se escribió me debería quitar el filtro y no lo hace, me aparece en los botones de desplazamiento 1 de tantos (Filtado). Como puedo hacer para que al momento de borrar el contenido en cualquiera de estos cuados, no me aparezca (filtrado)

1 Respuesta

Respuesta
1
Una opción seria usar el evento al perder el enfoque de estas cajas de texto y ejecutar la instrucción para quitar el filtro
Private sub CajaDeText_LostFocus()
if trim(me.CajaDeText) = "" then me.filteron=false
end sub
Para cada uno de los objetos
Hola buen día, ya incorpore este evento en cada cuadro de texto y no funciono, el evento que se encuentra para activar los filtros, esta en después de actualizar y es el siguiente:
Private Sub F1_AfterUpdate()
Me.SubFormFiltros.Form.FilterOn = False
If IsNull(F1) = True Or Me.F1 = "" Then Me.F1 = "*"
If IsNull(F2) = True Or Me.F2 = "" Then Me.F2 = "*"
If IsNull(F3) = True Or Me.F3 = "" Then Me.F3 = "*"
If IsNull(F4) = True Or Me.F4 = "" Then Me.F4 = "*"
If IsNull(F5) = True Or Me.F5 = "" Then Me.F5 = "*"
Me.SubFormFiltros.Form.FilterOn = True
If Me.F1 = "*" Then
Me.F1 = ""
End If
If Me.F2 = "*" Then
Me.F2 = ""
End If
If Me.F3 = "*" Then
Me.F3 = ""
End If
If Me.F4 = "*" Then
Me.F4 = ""
End If
If Me.F5 = "*" Then
Me.F5 = ""
End If
End Sub
donde F1,F2,F3,F4 Y F5 son los nombres de cada cuadro de texto y este evento esta en cada cuadro de texto dependiendo del nombre del cuadro, estara bien?? si es asi, como se podria realizar para desactivar los filtros en el formulario
Para quitar el filtro filteron debe quedar en false, entonces el procedimiento podría ser el siguiente, para que si cualquier F este en blanco quite el filtro
Private Sub F1_AfterUpdate()
Me.SubFormFiltros.Form.FilterOn = False
dim sw as boolean
sw=true
If trim(F1 & "") = "" Then sw=false 'Otra forma de validar
If IsNull(F2) = True Or Me.F2 = "" Then sw=false
If IsNull(F3) = True Or Me.F3 = "" Then sw=false
If IsNull(F4) = True Or Me.F4 = "" Then sw=false
If IsNull(F5) = True Or Me.F5 = "" Then sw=false
if sw then Me.SubFormFiltros.Form.FilterOn = True
...
End Sub
Este evento se coloca antes o después del que te envíe
Prueba, en vez de...
Hola buen día, mira soy novato en esto del access, he intentado hacerlo por lado y lado pero no me funciona adecuadamente, no se activa el filtro y la verdad no se por donde más hacerle
Volvamos al principio, a partir del procedimiento que ya te funciona, haré unas modificaciones que no deberían afectar el estado actual
Private Sub F1_AfterUpdate()
dim sw as integer
sw=0

Me.SubFormFiltros.Form.FilterOn = False
If IsNull(F1) = True Or Me.F1 = "" Then Me.F1 = "*": sw=sw + 1
If IsNull(F2) = True Or Me.F2 = "" Then Me.F2 = "*": sw=sw + 1
If IsNull(F3) = True Or Me.F3 = "" Then Me.F3 = "*": sw=sw + 1
If IsNull(F4) = True Or Me.F4 = "" Then Me.F4 = "*": sw=sw + 1
If IsNull(F5) = True Or Me.F5 = "" Then Me.F5 = "*": sw=sw + 1
if sw<5 tren Me.SubFormFiltros.Form.FilterOn = True
If Me.F1 = "*" Then
Me.F1 = ""
End If
If Me.F2 = "*" Then
Me.F2 = ""
End If
If Me.F3 = "*" Then
Me.F3 = ""
End If
If Me.F4 = "*" Then
Me.F4 = ""
End If
If Me.F5 = "*" Then
Me.F5 = ""
End If
End Sub
if sw<5 tren
hace que se se quite el filtro solo si todos estan en blanco
para que se quite el filtro se alguno esta en blanco tendrias que cambiar solo esa linea
if sw=0 tren ...
Sin embargo, no veo en tu procedimiento donde le pasas los criterios del filtro, es decir una instrucción filter que tendría que ser más o menos así
Me.SubFormFiltros.Form.Filter "campo1=""" & me.f1 & """ and campo2= """ & me.f2 & """ and ......
Pero como dices que el procedimiento funciona, imagino que debe estar en otro evento

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas