Visual Basic - COMPARACION DE FECHAS EN COSULTAS

Life is soft - evento anual de software empresarial
 
Vista:

COMPARACION DE FECHAS EN COSULTAS

Publicado por Ruben (3 intervenciones) el 03/05/2003 02:29:58
Hola!!! tengo un problema muy raro que soy incapaz de solucionar y es muuy importante.

Pues el caso es que siempre que intento buscar en la base de datos una fecha determinada y el dia de este es menor que 13 (1..12), me altera el orden de la fecha y busca mes/dia/año en vez de dia/mes/año.
Le aplico un Format (fecha,"dd/mm/yyyy") y como si nada. Tambien mire la configuracion del sistema y está correcta ....

Ej: f=Format (Date,"dd/mm/yyyy")

SELECT * FROM tabla WHERE fecha=#" & f & "#" ó

SELECT * FROM tabla WHERE fecha=#02/05/03#"

y me obtiene las 05/02/03

Muchas gracias.

Saludos, Rubén.
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

RE:COMPARACION DE FECHAS EN COSULTAS

Publicado por tecniCam (186 intervenciones) el 03/05/2003 13:13:37
Prueba esto. Igual vale para una sola fecha:

criterio1 = Format(txtDesde, "dd, mm, yyyy")
criterio2 = Format(txtHasta, "dd, mm, yyyy")
SQL = "SELECT * FROM CAJA WHERE Fecha BETWEEN #" & criterio1 & "# AND #" & criterio2 & "# ORDER BY Fecha;"
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

RE:COMPARACION DE FECHAS EN COSULTAS

Publicado por tecniCam (186 intervenciones) el 03/05/2003 14:22:39
EFECTIVAMENTE TIENES RAZÓN Y...
Así no da fallos cuando el día es inferior a 13.

criterio1 = Format(txtDesde, "Short Date")
criterio2 = Format(txtHasta, "Short Date")
If CInt(Left(criterio1, 2)) < 13 Then criterio1 = formateaFecha(criterio1)
If CInt(Left(criterio1, 2)) < 13 Then criterio2 = formateaFecha(criterio2)
SQL = "SELECT * FROM CAJA WHERE Fecha BETWEEN #" & criterio1 & "# AND #" & criterio2 &

"# ORDER BY Fecha;"

Function formateaFecha(crit) As Date
Dim entra$, prime$, segun$, ultim$
entra = CStr(crit)
prime = Mid(entra, 4, 2)
segun = Left(entra, 2)
ultim = Right(entra, 4)
entra = prime & "/" & segun & "/" & ultim
formateaFecha = Format(entra, "Short Date")
End Function

Esta función cambia el sitio de los días con el de los meses cuando días es menor de 13,

y entonces es cuando llama a la función pasándole criterio1 y/o criterio2.
Ejemplo:
Si criterio1 = 10/05/2003, lo cambia por 05/10/2003, de esta forma lo entiende la

consulta y funciona.
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

RE:COMPARACION DE FECHAS EN COSULTAS

Publicado por tecniCam (186 intervenciones) el 03/05/2003 16:21:12
AÚN MEJOR Y YA SIN FALLOS AL SER UN DIA MAYOR DE 13 Y OTRO NO:

Hacemos que aún cuando no sea mayor de 13 uno de ellos, al serlo el otro se

conviertan los dos al estilo inglés.

¡Toma castaña! ¡Ahora sí de verdad funciona a tope!

criterio1 = Format(txtDesde, "Short Date")
criterio2 = Format(txtHasta, "Short Date")
If CInt(Left(criterio1, 2)) < 13 Or CInt(Left(criterio2, 2)) < 13 Then
criterio1 = formateaFecha(criterio1)
criterio2 = formateaFecha(criterio2)
'Aquí está el detalle (la diferencia), CUANDO UNO DE LOS DOS DIAS

SEA MENOR QUE 13 SE TRANSFORMARÁN LOS DOS, NO SÓLO ÉL COMO ESTABA ANTES.
End If
SQL = "SELECT * FROM CAJA WHERE Fecha BETWEEN #" & criterio1 & "# AND #" &

criterio2 & "# ORDER BY Fecha;"

LA FUNCIÓN SIGUE SIENDO LA MISMA DE ANTES:

Function formateaFecha(crit) As Date
Dim entra$, prime$, segun$, ultim$
entra = CStr(crit)
prime = Mid(entra, 4, 2)
segun = Left(entra, 2)
ultim = Right(entra, 4)
entra = prime & "/" & segun & "/" & ultim
formateaFecha = Format(entra, "Short Date")
End Function

Hasta luego Lucaaas...
Me has tenido más de una hora haciendo esto, pero al final creo que no te

podrás quejar.
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

RE:COMPARACION DE FECHAS EN COSULTAS

Publicado por Beto (1 intervención) el 05/05/2003 18:06:55
Gente... No hace falta tanto lio. Para comparar fechas en consultas y no tener problemas, sin importar la configuración regional ni el motor de Base de datos, trabajen con COMMAND y usen DateDiff(). De todas maneras si trabajan con Access les recuerdo que el formato para las fechas es #MM/DD/YYYY# por que si lo ponen #DD/MM/YYYY# las da vuelta si el dia es mayor a 12.
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

RE:COMPARACION DE FECHAS EN COSULTAS

Publicado por tecniCam (186 intervenciones) el 05/05/2003 22:38:17
No es tan fácil Beto. Además lo que puse más arriba no es del todo complicado y FUERZA a que salga bien SIEMPRE.
Esa función DateDif() sirve para restar fechas y no para conseguir mostrar todas las fechas entre una y otra indicadas, por lo que, si restamos día 1 de día 4, mostraría -3 o 3, depende el orden y NUNCA los días 1, 2, 3 y 4 que es lo que se pretende.
Por otro lado eso de "mm/dd/yy" o "mm/dd/yyyy" no vale para todo y, sin embargo sí que capta "Short Date", por ejemplo.
Además, pocas recomendaciones creo que podrás hacer a gente que llevamos en esto más de 10 años. ¿Funciona mi código o no?, pues eso... te "recomiendo" que lo uses preferentemente.
Hasta luego Lucas...
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