Extraer datos entre fecha access

La consulta se basa en TABLA con campo fecha (fecha corta) formato dd/mm/yyyy.

Desde un formulario dos parámetros: txtDfecha (la inicial) txtHFecha (la final)

Verificado que existen apuntes el 01/07/2017 en la tabla.

si pongo Fecha inicial 01/07/2017  y final 01/07/2017, no mestra ningun dato en informe si pongo 01/05/2017 al  01/07/2017, me puestra desde 01/01/2017 al el ultimo

He probado con todo esto:

Me.TxtDFecha = DateAdd("d", -1, Me.TxtDFecha) Lo puse para el usuario no tuviese que poner menos un dia en la fecha inicial
mCondicion = "((NIFCIF='" & Me.TxtID.Value & "') and ((FECHA >=#" & Format(Me.TxtDFecha, "dd/mm/yyyy") & "# ) and (FECHA<=#" & Format(Me.TxtHFecha, "dd/mm/yyyy") & "#)))"
'mCondicion = "FECHA BETWEEN #" & Format(Me.TxtDFecha, "dd/mm/yyyy") & "# and #" & Format(Me.TxtHFecha, "dd/mm/yyyy") & "#"
'Fecha>#" & Format(Texto15, "mm/dd/yyyy") & "# and Fecha<#" & Format(Texto17, "mm/dd/yyyy") & "#"
'WHERE (((pda02.Fecha) Between #" & Format(FchIncPda, "mm/dd/yyyy") & "# AND #" & Format(FchFinPda, "mm/dd/yyyy") & "#)
'WHERE (Fecha)>=#" & Format(FchIncPda, "mm/dd/yyyy") & "# AND (Fecha)<=#" & Format(FchFinPda, "mm/dd/yyyy")

solo si deseo sacar el informe del dato 01/07/2017 tengo que poner valor inicial 30/06/2017 

1 Respuesta

Respuesta
1

En las lineas que empiezan con el mCondición, te falla el formato de las fechas, que debiera ir "a la americana", como haces en las que empiezan por el WHERE.

Por otro lado, a las última lineas no les veo ningún fallo de sintaxis, y te deberían funcionar... ¿Dónde usas esos fragmentos de código? ¿En la construcción de una SQL, en un DoCmd.OpenForm/Report?

Como se me tiene dado el caso, comprueba que en la tabla (o en los cuadros de texto) no te guarde (coja) también la hora, lo que es motivo de exclusión de registros..

Por último, puedes tratar las fechas como lo que realmente son, números, teniendo en cuenta que la parte entera es lo que corresponde a la fecha, y los decimales a las horas. Puedes hacer la conversión con CLng() o CDbl(). En el primer caso te devolverá un número entero, en el segundo uno decimal.

Un saludo


¡Gracias! Me volví loco con las expresiones pero al final lo solvente, poniendo el formato americano en la fecha.

mCondicion = "((NIFCIF='" & Me.TxtID.Value & "') and ((FECHA >=#" & Format(Me.TxtDFecha, "mm/dd/yyyy") & "# ) and (FECHA<=#" & Format(Me.TxtHFecha, "mm/dd/yyyy") & "#)))"

Lo pongo en la Condicion where de OpenReport.

La cuestión era que a la vez, en el informe a generar tenia que obtener del mismo cliente todas la facturas del rango solicitado, y obtener los datos de más de un emisor de factura. Dado que los clientes son de una Cartera de Clientes, y la empresa cambio de emisora cambio de tanto de nombre comercial como de denominación, de C.B. ( Comunidad de Bienes ), a persona física, y por ultimo a S.L., esto lo solvente también obteniendo los datos en la sección de paginación del Report.

Después de haber leído mucho sobre el tema, ¿por qué el tratamiento de las fechas cambia tanto según funciones a emplear?

Con la conversión a numero de la fecha, se trataría igual en todas, ¿o según los casos funciona o no?

Como los lenguajes de programación están en "inglés", las fechas deben ponerse en ese formato mm/dd/yyy, para que no haya confusiones. Otra cosa es cómo las vea el usuario final en la propia aplicación, que dependiendo de la configuración regional de su PC las verá en uno u otro formato.

Las fechas realmente son números, que es como Access las trabaja, siendo la convención que el 01/01/1990 00:00:00 es el 1. Como te decía antes, la parte entera corresponde a la fecha (día, mes y año) y la parte decimal a las horas, minutos y segundos. Por tanto, trabajando con números, siempre interpretará bien la fecha, sin importar su formato.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas