Access - Problema código rango fechas

 
Vista:

Problema código rango fechas

Publicado por Carlos (17 intervenciones) el 20/02/2020 11:57:46
Buenos días,

Estoy creando un código para visualizar datos filtrando por rango de fechas en un formulario.

El formulario se basa en una consulta con los campos: codigo, fecha inicial, fecha final, formato, acceso, descripción.

Quiero que el usuario ponga la fecha inicial i la fecha final en dos cuadros de texto y, clicando un botón ejecute el filtro.

Este es el código, pero me da error de sintaxis. Alguien me puede echar una mano? Muchas gracias de antemano.

1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Comando36_Click()
'Defino variable
    Dim SQL As String
 
    If validaDates Then
'Selecciona todos los campos de la consulta extraídos del formulario
        SQL = "SELECT codigo, fecha_inicial, fecha_final, formato, acceso, descripcion"
'Desde la consulta C24_Eliminar
        SQL = SQL & " FROM C24_Eliminar"
'Donde tiene que mostrar todos los campos anteriores donde la fecha incial i la fecha final esten entre las fechas introducidas en los cuadros de texto Texto32 i Texto34
        SQL = SQL & " WHERE Any_inicial BETWEEN #" & Format(Me.Texto32, "mm/dd/yyyy") & "# AND #" & Format(Me.Texto34, "mm/dd/yyyy")AND Any_Final BETWEEN #" & Format(Me.Texto32, "mm/dd/yyyy")& "# AND #" & Format(Me.Texto34, "mm/dd/yyyy")
        End If
End Sub
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
Imágen de perfil de Jhonattan
Val: 308
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Problema código rango fechas

Publicado por Jhonattan (123 intervenciones) el 20/02/2020 15:23:46
Hola en la consulta que tienes ve a modo diseño y en el campo fecha inicial coloca en criterios, Formularios!Nombre de tu formulario!txtfechainicial y en el campo fecha final colocas en criterios formularios!nombre del mismo formulario!txtfechafinal, de esa forma al ejecutar con el boton se hace el filtro
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

Problema código rango fechas

Publicado por Carlos (17 intervenciones) el 21/02/2020 09:13:54
Gracias por contestar.

He probado lo que me has dicho, pero entonces el formulario se me carga en blanco, no aparece ningun registro. Pongo las fechas en los cuadros de texto y no ocurre nada. No filtra y el formulario continúa en blanco.
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 Jhonattan
Val: 308
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Problema código rango fechas

Publicado por Jhonattan (123 intervenciones) el 21/02/2020 15:25:44
Cuando llegue a casa te voy a pasar un ejemplo que tengo hecho para que lo analices yo lo hice como te indiqué y funciona a la perfección
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

Problema código rango fechas

Publicado por Anonimo (3316 intervenciones) el 20/02/2020 21:53:22
EN ocasiones la función Between no reconoce como números los parámetros, es por ello que con las fechas se suele utilizar con preferencia el mayor que y menor que para delimitar un intervalo.

Si se persiste en utilizar Between, hay que facilitarle el trabajo y es tan sencillo como 'pasarle' las fechas como numero, un ejemplo en base a lo publicado:

Original ==> … BETWEEN #" & Format(Me.Texto32, "mm/dd/yyyy") & "# AND #" & Format(Me.Texto34, "mm/dd/yyyy") ….

Modificado ==> …. BETWEEN " & CDBL(Me.Texto32) & " AND " & CDBL(Me.Texto34) & " ….

Solo se necesita que los cuadros de texto (texto32 y texto34) sean 'fechas Access', si son cuadros de texto independientes ha de hacerse asi:
Modificado_2 ==> …. BETWEEN " & CDBL(Cdate (Me.Texto32)) & " AND " & CDBL(Cdate(Me.Texto34)) & " ….

Una de las ventajas de utilizar números y funciones de Access es la independencia que ofrece respecto al formato de fecha, 'traducirá" las fechas del formato regional al americano sin complicaciones
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

Problema código rango fechas

Publicado por Carlos (17 intervenciones) el 21/02/2020 09:31:09
Gracias por contestar.

Hes puesto el siguiente código

SQL = SQL & " WHERE Any_inicial BETWEEN #" & CDbl(CDate(Me.Texto32)) & " AND " & CDbl(CDate(Me.Texto34)) & " AND Any_Final BETWEEN #" & CDbl(CDate(Me.Texto32)) & " AND " & CDbl(CDate(Me.Texto34))

Y me hace una cosa extraña. Cuando lo ejecuto me rellena los campos Any_inicial y Any_final del primer registro del formulario con las fechas que he puesto en los cuadros de texto, pero no hace ningún filtro.
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 Francisco
Val: 467
Plata
Ha disminuido 1 puesto en Access (en relación al último mes)
Gráfica de Access

Problema código rango fechas

Publicado por Francisco (212 intervenciones) el 21/02/2020 19:49:46
Hola

Usa

1
2
3
SQL = SQL & " WHERE Any_inicial BETWEEN #" & CDbl(CDate(Me.Texto32)) & " AND " & CDbl(CDate(Me.Texto34)) & " AND Any_Final BETWEEN #" & CDbl(CDate(Me.Texto32)) & " AND " & CDbl(CDate(Me.Texto34))
 
Debug.print SQL

y muestra el resultado

Saludos
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 Francisco
Val: 467
Plata
Ha disminuido 1 puesto en Access (en relación al último mes)
Gráfica de Access

Problema código rango fechas

Publicado por Francisco (212 intervenciones) el 21/02/2020 19:56:47
Hola

Revisando habia errores logicos, no cerraban las "#" correctamente

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub Comando36_Click()
    'Defino variable
    Dim SQL As String
 
    If validaDates Then
        'Selecciona todos los campos de la consulta extraídos del formulario
        SQL = "SELECT codigo, fecha_inicial, fecha_final, formato, acceso, descripcion"
        'Desde la consulta C24_Eliminar
        SQL = SQL & " FROM C24_Eliminar"
        'Donde tiene que mostrar todos los campos anteriores donde la fecha incial i la fecha final esten entre las fechas introducidas en los cuadros de texto Texto32 i Texto34
        SQL = SQL & " WHERE "
        SQL = SQL & " Any_inicial BETWEEN #" & Format(CDate(Me.Texto32), "mm/dd/yyyy") & "# AND #" & Format(CDate(Me.Texto34), "mm/dd/yyyy") & "# AND "
        SQL = SQL & " Any_Final BETWEEN #" & Format(CDate(Me.Texto32), "mm/dd/yyyy") & "# AND #" & Format(CDate(Me.Texto34), "mm/dd/yyyy") & "#"
 
        Debug.Print SQL
 
    End If
End Sub

Saludos
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

Problema código rango fechas

Publicado por Anonimo (3316 intervenciones) el 21/02/2020 20:44:52
Pregunta:

Qué pintan las almohadillas (#) como marcadores de un texto que representa a una fecha con utilizar UN NUMERO que es el dato real (interno) que representa a esa misma fecha.

Si la fecha no fuera un simple numero ¿podrían sumársele días o cualquier otro intervalo?.

Una fecha (para Access e internamente) es un numero que comienza a contar en positivo desde este día:
1
format (0,"dd mmm yyyy")

En mis ejemplos no he utilizado marcador alguno (a no ser que mi monitor me engañe y los oculte en mis respuestas)
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 Francisco
Val: 467
Plata
Ha disminuido 1 puesto en Access (en relación al último mes)
Gráfica de Access

Problema código rango fechas

Publicado por Francisco (212 intervenciones) el 21/02/2020 21:47:48
Se utiliza almohadillas por que es la forma correcta para dar formato en SQL y aparte de eso es mas facil para depurar, en fin buenas practicas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
'*******************************************************************************
'* FechaSQL
'* devuelve una cadena debidamente formateada para su uso en sentencias SQL, es
'* decir con formato mm/dd/yyyy y, si fuera preciso, hh:nn:ss
'* Argumentos: datFecha => fecha a formatear
'* uso: FechaSQL (Now) devuelve #08/25/15 22:45:36#
'*******************************************************************************
Public Function FechaSQL(datFecha As Date) As String
' según la hora sea entera o no, aplicaré un formato u otro
	If Int(datFecha) - datFecha = 0 Then
		FechaSQL = Format$(datFecha, "\#mm\/dd\/yyyy#")
	Else
		FechaSQL = Format$(datFecha, "\#mm\/dd\/yyyy hh\:nn\:ss#")
	End If
End Function
' FechaSQL

Para sumar o restar se utiliza DateAdd() o DateDiff(), tambien se puede hacer en una sentencia lo siguiente:

1
Debug.Print "#02/21/2020# - #02/01/2020#"


Saludos
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

Problema código rango fechas

Publicado por Anonimo (3316 intervenciones) el 22/02/2020 01:20:52
La forma correcta de programar es utilizar de forma eficiente los recursos y en Access los números no requieren tratamiento, que los números sean días o zapatos, a Access le da lo mismo.

Si te gusta dilapidar los recursos … tu mismo pero lo adecuado es darle formato estético al final, mas de una vez he visto el juego que le gusta a los jefes (se juega a calcular el tiempo en formato decimal, así las horas tienen 100 minutos cuando conviene).

Algo asi mas o menos:
? "#02/21/2020# - #02/01/2020#"
#02/21/2020# - #02/01/2020#

Ni con debug lograras que Access entienda que se desea hacer una suma cuando 'los marcadores' indican que es un dato alfanumérico (texto)

Podrías lograrlo si expresamente le indicas que evalúe esa expresión:
?eval( "#02/21/2020# - #02/01/2020#")
20

En fin, para que continuar, un numero siempre será un numero y le valdrá a un chino y su calendario y a un europeo y su calendario.
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

Problema código rango fechas

Publicado por Carlos (17 intervenciones) el 25/02/2020 09:40:28
Hola, siento ser tan pesado, pero el problema se mantiene. Cuando ejecuto el código, se limita a poner las fechas que introduzco en los cuadros de texto en los campos Any_inicial y Any_final del primer registro. No filtra.
Este era el código. Hay algunos campos cambiados porque modificamos el formulario.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Comando40_Click()
    Dim SQL As String
 
    If validaDates Then
        SQL = "SELECT CODI_ARXIVADOR, Codi_QdC_vigent, Nom_unitat_vigent, Descripció_contingut, Des_de, Fins_a, Any_inici, Any_final, Ubicació, O/, Format, Annex?"
        SQL = SQL & " FROM C24_Eliminar"
        SQL = SQL & " WHERE "
        SQL = SQL & " Any_inicial BETWEEN #" & Format(CDate(Me.Texto36), "mm/dd/yyyy") & "# AND #" & Format(CDate(Me.Texto38), "mm/dd/yyyy") & "# AND "
        SQL = SQL & " Any_Final BETWEEN #" & Format(CDate(Me.Texto36), "mm/dd/yyyy") & "# AND #" & Format(CDate(Me.Texto38), "mm/dd/yyyy") & "#"
 
        Debug.Print SQL
 
    End If
End Sub

Muchas 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

Problema código rango fechas

Publicado por Anonimo (3316 intervenciones) el 25/02/2020 13:33:37
Yo lo intentaría con datos conocidos y una vez logrado el éxito, introduciría las variables …..

Origen:
…. Any_inicial BETWEEN #" & Format(CDate(Me.Texto36), "mm/dd/yyyy") & "# AND #" ….


Alternativa (temporal):

...… Any_inicial BETWEEN #5/30/2020# AND #" …..

Y a titulo experimental (por 'Any_inicial'):
...… Any_inicial BETWEEN 2020 AND #" …..
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