Filtrar un campo a través del dato colocado en un formulario

En la consulta de un sub formulario, necesito filtrar los valores de un campo numérico cuya referencia es el valor de un Cuadro de texto independiente llamado “Viaje” de mi formulario.

Los valores son numéricos y van de 0 a 26 donde 0 es un viaje no asignado.

Lo que necesito es que si el valor del “Viaje” es cero o esta vacío, el sub formulario me filtre todos los datos, caso contrario solo el valor colocado en Viaje.

Si utilizo:  Como "*" & [Formularios]![CA-Menú de Auditoria]![Viaje] y dejo el cuadro Viaje vacío me trae todo, pero si coloco 1  me trae los datos:  1, 11 y 21

Si le quito el Como "*" & me trae específicamente lo que indica el cuadro Viaje pero no puedo ver todo.

Intente también con condicional: SiInm([Formularios]![CA-Menu de Auditoria]![Viaje]="0","*",[Formularios]![CA-Menu de Auditoria]![Viaje]) pero tampoco funcionó.

Intente también cambiando el formato de los datos a texto y me trae el mismo problema.

Necesitaría que por favor me indiquen que estoy haciendo mal o como puedo solucionarlo.

1 respuesta

Respuesta
2

Jorge: Yo quitaría el criterio de la consulta y programaría el Evento, Después actualizar, (After Update) del cuadro de Texto, con un Slect Case. Más o menos así:

Private Sub Viaje_AfterUpdate()
Select Case Me.Viaje.Value
Case 0
Me.Filter = "" 
Me.FilterOn = False
Case Else
Me.Filter = "Viaje = & Me.Viaje.Value
Me.FilterOn = True
End Select
End Sub

Si es que siempre tienes valores en el cuadro de Texto y no los escribes cada vez, puedes programar el Evento >> Al Actualizar (Form_Current).

Lo he ido haciendo sobre la marcha pero creo que funcionará. Mis saludos >> Jacinto

Jorge: No sé si habrá otros errores, pero he visto uno:

La línea >>

Me.Filter= "Viaje = & Me.Viaje.Value

Debe ser>>

Me.Filter= "Viaje = " & Me.Viaje.Value

Saludos >> Jacinto

Jorge: Sveinbjorn ha hecho un comentario, en el que comenta con acierto, que no he contemplado el caso de que no haya nada seleccionado.

Ya que hemos de contemplar eso, quizá yo adoptaría la solución del If... y quedaría algo así:

Private Sub Viaje_AfterUpdate()
If IsNull(Me.Viaje) Or Me.Viaje = 0 Then
Me.Filter = "" 
Me.FilterOn = False
Else
Me.Filter = "Viaje =" & Me.Viaje.Value
Me.FilterOn = True
End If
End Sub

Espero que ésto cubra tu necesidad. Un saludo >> Jacinto

Buenos días: He probado ambas posibilidades pero el problema sigue.

Si coloco 1 en mi cuadro me trae todos los uno pero si dejo vacío el cuadro no me trae ningún registro. igual que con el condicional que les expuse. No se como poner el comodín para que me muestre todos los registros.

Gracias.

Jorge: Tal como te describo arriba, el código actúa en el evento AfterUpdate .

También te comentaba, que lo puedes poner en el Form_Current,(Después de Actualizar) e in cluso en el LostFocus (Al perder el enfoque).

Como desconozco tu proceso, te lo puse así, pero si quieres prueba con los otros eventos y prueba varios valores. Si tienes valores numéricos, con el Like te ocurrirá que cuando pongas 1, te va mostrar el 11, 12,... Prueba en el Lost Focus, así

Private Sub Viaje_LostFocus()
If IsNull(Me.Viaje) Or Me.Viaje = 0 Then
Me.Filter = "" 
Me.FilterOn = False
Else
Me.Filter = "Viaje =" & Me.Viaje.Value
Me.FilterOn = True
End If
End Sub

Y si copias y pegas el código, no te olvides de activar el Evento en Propiedades >> Eventos >> Al perder el foco. Saludos >> Jacinto

Jacinto: He pegado el código tal cual me no pones tu y funciona bien: si coloco 1 me trae solo el 1, pero si no tiene datos la casilla no me muestra nada. Lo que necesito es que muestre todos los registros si la casilla esta vacía. También he probado utilizando el campo Texto pero me hace lo mismo. 

Saludos y muchas gracias.

Jorge: Es posible que el Campo si tenga dao y tu no lo veas. Puede ser que contenga una cadena vacía >> ""

Si fuera el caso, modifica la línea If del siguiente modo:

If IsNull(Me.Viaje) Or Me.Viaje = 0 Or Me.Viaje = "" Then

Comentame si así te va bien. Mis saludos >> Jacinto

Lamentablemente sigue igual. Cuando esta vacío el cuadro no muestra nada.

En el campo de la consulta le deje solo la referencia al cuadro Viajes.

Gracias Jorge

Jorge: En el Campo Criterios de la Consulta no tiene que haber nada. Ya filtra el código

En cualquier caso, si quieres poner aquí en un enlace, esa parte de tu BD, con la anomalía, veo que pasa. Doy por supuesto que si tienes datos confidenciales o personales, los cambiarás a ficicios.

Si quieres optar por la solución de enviarme esa BD a mi correo, puedes hacerlo a: [email protected]

Mis saludos >> Jacinto

Jacinto: Te envíe la información.

Mis saludos. Jorge

Jorge: Recibida tu documentación veo que, lo que realmente intentas hacer, es "Filtrar un Sub Formulario", y no un Formulario.

En tu caso además el Nombre del "Control" que contiene al Sub Formulario es distinto al del Sub Formulario en sí, que es perfectamente válido, pero hay que saberlo.

El Control tiene el Nombre de PEN y el Sub Form >>CA-SF Pendientes.

Entonces el código, evidentemente cambia y lo pongo aquí por si algún usurio considera que es de Utilidad.

Private Sub Viaje_LostFocus()
If IsNull(Me.Viaje) Or Me.Viaje = 0 Or Me.Viaje = "" Then
        Me!PEN.Form.Filter = ""
        Me!PEN.Form.FilterOn = False
Else
        Me!PEN.Form.Filter = "Viaje =" & Me.Viaje.Value
        Me!PEN.Form.FilterOn = True
End If
End Sub

El resto del Código no lo he mirado, porque ando un poco escaso de tiempo y dado que ya he hecho pruebas con el código anterior, elimino la Copia de BD que me has enviado.

Mis saludos >> Jacinto

¡Gracias!

Ahora si. Excelente!

Muchísimas gracias por tu disposición.

Mis saludos. Jorge

Jacinto: Una ultima pregunta. 

Si el campo fuera texto.  ¿Seria igual el código?

Saludos y gracias

Jorge: Siendo texto has de cambiar la línea >>

 Me!PEN.Form.Filter = "Viaje =" & Me.Viaje.Value

Por ésta otra:

 Me!PEN.Form.Filter = "Viaje = '" Me.Viaje & "'"
'Además de modificar las comillas, quita el .Value

Mis saludos >> Jacinto

¡Gracias nuevamente!

Mis saludos. Jorge

Buenas tardes Jacinto:

Estoy tratando de adaptar este filtro que me indicaste hace un tiempo a una nueva consulta sobre un Sub Formulario y no he logrado hacerlo.

En esta oportunidad, en el formulario principal, tengo un cuadro de opciones llamado “Opción” , cuyo primer botón (Opcion1) tiene valor 1 y segundo botón (Opcion2) tiene valor 2

Los datos se encuentran en un Sub Formulario continuo llamado NEC dentro del formulario principal.

Al presionar la opcion1 debería mostrarme todas las líneas que contengan valores 0 o Nulos del campo Movimiento del Sub Formulario

Al presionar la opcion2 debería mostrarme todas las líneas que contengan valores > 0 del campo Movimiento del Sub Formulario

Si pudieses ayudarme te lo agradecería.

Muchos saludos y como siempre Muchas Gracias por tu ayuda 

Jorge: He visto que has generado una pregunta nueva, y eso es bueno porque recibes respuestas desde ángulos distintos, con lo que puedes elegir la metodología que más se adapte a ti.

Ni contestación la tienes en:

Filtrar datos de un subformulario desde un cuadro de opciones

Mis saludos >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas