Access - Problema al utilizar between

   
Vista:

Problema al utilizar between

Publicado por carlos (34 intervenciones) el 21/01/2013 18:17:20
Hola a todos, espero que me podáis ayudar,

intento mediante un formulario mostrar los datos de una tabla comprendidos entre dos fechas.
Tengo dos controles tipo calendario para seleccionar la fecha inicial y la fecha final, y un botón para mostrar el resultado de la consulta.
El caso es que si selecciono p.e. como fecha inicial el día 14 de enero y como fecha final el 18 de enero, me muestra los registros de los días 14, 15, 16 y 17 de enero pero no los del día 18 (y si que hay registros ese día).
Estoy haciendo una select del siguiente modo:
select * from tabla where campo between cdate ('" & form!selfechaini.value & "') and cdate('" & form!selfechafin.value & "')


Si alguno puede darme una pista, gracias de antemano.
Carlos.
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 Neckkito

Problema al utilizar between

Publicado por Neckkito (1104 intervenciones) el 22/01/2013 09:29:11
Hola!

El BETWEEN es inclusivo. Eso significa que debería incluirte tanto la fecha inicial como la final.

Lo único que se me ocurre es que selfechafin no te esté dando la fecha correcta.

Para comprobarlo puedes crearte un minicódigo en un botón que te diga qué fecha está tomando. Si lo quieres a través de la ventana inmediato del VBE escribes, en el evento "Al hacer click" del botón:

...
Private Sub...
Dim vFFin as variant
vFFin = cdate(me.selfechafin.value)
debug.print vFFin
...

Si lo quieres a través de un msgbox escribes:
...
Private Sub...
Dim vFFin as variant
vFFin = cdate(me.selfechafin.value)
msgbox vFFin
...

Si te salta un error de código probablemente es que vFFin está cogiendo un valor nulo.

Así podrás comprobar qué valor está cogiendo la SQL como fecha final.

Sin más información no puedo darte más pistas.

Un saludo,


http://neckkito.siliconproject.com.ar
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 al utilizar between

Publicado por carlos (34 intervenciones) el 22/01/2013 09:51:57
Hola,

selfechafin está tomando un valor correcto, no obstante he realizado la comprobación que me has indicado y efectivamente toma un valor correcto.
El problema está en lo que indicabas al principio, between es inclusivo pero en este caso no toma el valor de la fecha final. Para que me saque los registros de la fecha final tengo que poner en selfechafin un día más.
Creo que el problema puede venir porque aunque ponga un valor para la fecha final no saca esos registros por algo relacionado con la hora, pero no sé como solucionarlo.

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 Neckkito

Problema al utilizar between

Publicado por Neckkito (1104 intervenciones) el 22/01/2013 10:00:25
Hola!

¿Por qué no intentas convertir el formato de la fecha?

Intenta hacer una prueba con algo así:

...
vFIni = cdate(me.selfechaini.value)
vFFin=cdate(me.selfechafin.value)

select * from tabla where campo between #'" & format(vFIni,"mm/dd/yy") & "# and #'" & format(vFFin,"mm/dd/yy") & "#"
...

A ver si así te "pirula".

Salu2!
Neckkito
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 al utilizar between

Publicado por carlos (34 intervenciones) el 22/01/2013 11:00:51
Hola,

por desgracia sigue sin pirular. Por algún motivo omite los resgistros de la fecha seleccionada como fin.
Lo que he visto por si puede servir de indicio, es que aunque en la tabla ese campo fecha está definido como fecha/hora (fecha corta), si lo muestro en un formulario me aparece como fecha y hora. Me explico, el dato recogido es ese campo puede ser 18/01/2013 pero si lo muestro en un formulario y tiene como formato fecha general, muestra 18/01/2013 15:45:30
Entonces puede ser algo relacionado con el formato.

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 Neckkito

Problema al utilizar between

Publicado por Neckkito (1104 intervenciones) el 22/01/2013 11:24:51
Hola!
Si quieres puedes pasarme una copia de tu BD (o si te va mejor pues creas una miniBD con los elementos implicados), eso sí, por favor, comprimida en zip o rar, a mi e-mail.
Le echaré un vistazo a ver si soy capaz de ver "algo".
Mi mail es neckkito(ARROBA)myopera(PUNTO)com

Saludos,

Neckkito
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 al utilizar between

Publicado por carlos (34 intervenciones) el 23/01/2013 10:46:55
Hola,

ya está solucionado.
El problema era que tengo definido en una tabla un campo fecha (fecha corta) pero los registros los introduzco a través de un formulario y en ese campo en concreto tenía puesto que tomará el valor mediante la función ahora().
Cuando toma el valor con esta función coge fecha y hora del sistema. Cuando quiero hacer una consulta con BETWEEN, al tener en ese campo fecha y hora, y los valores inicial y final de fecha (para la consulta) los he tomado a través de un control calendario, no me muestra los valores de la fecha final.
He modificado los valores del campo fecha de la tabla y he dejado solamente la fecha (he suprimido la hora) y al hacer la consulta funciona perfectamente.

Gracias por tu colaboración Neckkito.
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 Norberto

Problema al utilizar between

Publicado por Norberto (432 intervenciones) el 29/01/2013 12:31:29
Hola.

Si alguna otra vez te ocurre lo mismo, es decir que en un campo tienes un valor de fecha + hora, y quieres manejar sólo la fecha, usa la función Entero (Int).

Fecha = Entero(CampoAhora)
Hora = CampoAhora - Entero(CampoAhora)

Un saludo.
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