Access - Formulario consulta. Problema al filtrar fechas.

 
Vista:
sin imagen de perfil

Formulario consulta. Problema al filtrar fechas.

Publicado por DinoZ (7 intervenciones) el 07/04/2022 23:04:45
Buenas a todos,

Tengo una pequeña duda por aquí. Espero poder plantearla de la mejor forma posible.

He elaborado una base de datos para utilizar como agenda para planificar eventos.

En esa base, tengo un formulario para realizar consultas... y ando atascado con él...

lZazebb

Este formulario carga de esta consulta:

ngkOiKV

Como pueden ver, el formulario carga TODOS los eventos. Incluidos los que ya han pasado. Por ejemplo, hoy es 07 de abril y se puede ver un evento que tuvo lugar el mes de marzo pasado.

Me gustaria que cuando este formulario sea abierto cargue solamente los eventos de hoy en adelante. NO los anteriores. Los anteriores, los quiero ver solo si los consulto, pero de entrada, al cargar, no.

Lo más sencillo que se me ocurrió fue, en esa consulta que bebe el formulario, agregar la función ">=Fecha()" en el campo fecha.

Funciona, si... pero el problema es que si después pretendo utilizar los campos de texto que he creado "Desde" y "Hasta" para consultar una fecha anterior a hoy... pues no me carga esos datos.

Se queda en blanco

GcHtihc

En el botón "Buscar", al hacer click, es donde tengo el código para que se ejecute la consulta cuando quiero ver los eventos entre dos fechas determinadas, que son introducidas en los campos "Desde" y "Hasta". "Hasta" para que me aplique el filtro.

Ese código es el siguiente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Buscar_Click()
    If Desde.Value = "" Or IsNull(Desde.Value) Then
    MsgBox "no tecleaste FECHA DESDE"
    Me.Desde.SetFocus
    Exit Sub
    End If
    If Hasta.Value = "" Or IsNull(Hasta.Value) Then
    MsgBox "no tecleaste FECHA HASTA"
    Me.Hasta.SetFocus
    Exit Sub
    End If
 
    Dim Filtro As String
    Filtro = "Fecha>= #" & Format(Me.Desde, "mm/dd/yyyy") & " " & "# and Fecha<=#" & Format(Me.Hasta, "mm/dd/yyyy") & "#"
    Me.Eventos1.Form.Filter = Filtro
    Me.Eventos1.Form.FilterOn = True
End Sub

Imagino que el problema anda en que el filtro se queda puesto y no se elimina tras la consulta entre fechas... pero es que no logro hacer que funcione como quiero.

Muchas gracias de antemano.

Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Formulario consulta. Problema al filtrar fechas.

Publicado por Anonimo (3316 intervenciones) el 07/04/2022 23:56:09
Te has planteado que al abrir el formulario se le adjudique al campo 'desde' la fecha actual y aplicar el filtro....

El formulario se cargaría con todos los datos y solo mostrará una parte de ellos, solo presentará problemas si el numero de registros en muy alto (pero bastante alto).

Una opción que suele aligerar los formularios con alto numero de registros es modificar el origen de datos en lugar de aplicar un filtro, pero todo depende del entorno de trabajo.

De cualquier forma, unos Tips para optimizar ese código:

La forma optima de evaluar si el dato es una fecha, es verificar que es una fecha valida
Antes >>>
1
If Desde.Value = "" Or IsNull(Desde.Value) Then
Despues >>
1
If Not IsDate(Me.Desde) Then
- (un simple espacio se salta la actual validación) -

Otra forma de crear el filtro (y valida para cualquier configuración regional) es convertir el texto en 'fecha Access' y tras ello a numero (verdadero valor de las fechas).

Antes >>
1
Filtro = "Fecha>= #" & Format(Me.Desde, "mm/dd/yyyy") & " " & "# and Fecha<=#" & Format(Me.Hasta, "mm/dd/yyyy") & "#"

Despues >>
1
Filtro = "Fecha>= " & Cdbl(Cdate(Me.Desde)) & " And Fecha<= " & Cdbl(Cdate(Me.Hasta))

Otra opción >>
1
Filtro = "Fecha Between " & Cdbl(Cdate(Me.Desde) & " And " & Cdbl(Cdate(Me.Hasta))
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Formulario consulta. Problema al filtrar fechas.

Publicado por DinoZ (7 intervenciones) el 10/04/2022 15:43:46
Muchísimas gracias por la respuestas. Para un novato como yo, vale mucho toda explicación tan completa. He utilizado las formas de evaluar que me recomiendas para asegurarme que el dato introducido sea siempre una fecha.

De nuevo, gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Eduardo

Formulario consulta. Problema al filtrar fechas.

Publicado por Eduardo (317 intervenciones) el 08/04/2022 10:21:34
Los filtros son manejables en bases de datos Jet (Access) que no tengan un nivel alto de registros, le recomiendo en lo posible utilizar SQL para cargar solo los datos necesarios.

Le dejo este link https://youtu.be/Bwg4KlJEkX4 de mi función para hacer filtros y búsquedas avanzadas. Aunque me encuentro preparando una nueva versión, pero por ahora esta le sirve.

Ahora, la instrucción Filter sirve solo en formularios vinculados a datos y en bases de datos Jet, personalmente no lo hago porque utilizo PostgreSQL como servidor de datos, en consecuencia, trabajo con recordeset desconectados, ! toda una potencia ! y la forma de buscar varia notablemente.

En conclusión el error esta en la consulta retire la instucción >=Fecha() y en el formulario en el evento al abrir:

1
2
Me.Eventos1.Form.Filter = "fecha>=" & "#" & Format(Date, "mm/dd/yyyy") & "#"
 Me.Eventos1.Form.FilterOn = True
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Formulario consulta. Problema al filtrar fechas.

Publicado por DinoZ (7 intervenciones) el 10/04/2022 15:46:35
Muchísimas gracias por su ayuda.

He aplicado sus líneas de código, y con ellas me funciona el formulario de consulta tal como deseo.

He visto el video que me ha pasado y es realmente interesante. Probaré el archivo que adjunta para practicar.

Me servirá para esta y otras bases de datos con las que estoy trabajando.

Muchas gracias.

Podemos dar el tema como cerrado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar