![]() |
problemas con fecha en consulta
Hola , es un problema un poco raro.
Hago una consulta por la fecha lo curioso es que solo falla cuando la variable "fecha2 := 12/11/2003" ahi falla. no lo hace. con fecha1 := 11/11/2003 y fecha1 := 13/11/2003 lo hace perfectamente. Buscando porque, llegue a la conclusion de que con esa fecha hace referencia a mm/dd/yy y no a dd/mm/yy revise la base de datos y si estan guardadas las fechas dd/mm/yy/ este es el codigo que uso esta muy simple.. var sql :string ; fecha1,fecha2:string; begin fecha1 := DateToStr(MonthCalendar1.Date); sql := 'Select * from historial where fecha1 >= #' + fecha1+'#' ; adoquery1.SQL.Clear; adoquery1.sql.Add(sql); adoquery1.Active := true; espero me de a entender y alguien puede decirme porque.... o como lo puedo resolver... |
Por qué no utilizas:
MiFecha:=FormatDateTime('mm/dd/yyyy'); Y así formateas las fechas de la manera que te convenga. Un Saludo. |
Hola.
En realidad es muy probable que en la base de datos las fechas no estén guardadas ni en formato mm/dd/yyyy ni en dd/mm/yyyy, sinó que simplemente estarán almacenadas como un número entero. Aunque eso depende de cada servidor o base de datos que utilizes. Cuando consultas los datos, los ves en formato dd/mm/yyyy porqué la aplicación al mostrarlos, al saber que són de tipo fecha los convierte al formato de fecha especificado en la configuración regional del ordenador. Es muy habitual que en una sentencia le tengas que pasar los datos en el formato inglés mm/dd/yyyy. Puesto que el Servidor no puede saber el formato de fecha del Ordenador que le ha pasado la sentencia, por lo que por defecto la va a interpretar en inglés. Si no quieres hacer muchos cambios en tu aplicación, simplemente cambia el formato en el que pasas la fecha (con el FormatDateTime('mm/dd/yyyy', Fecha)). Aunque una forma mejor de pasar estos datos, es usando parámetros. La consulta quedaria en (la estableces en tiempo de diseño y no en tiempo de ejecución) : select * from Tabla where Fecha >= :FECHA Ahora veras que en la propiedad Params del objeto Query, tienes un parámetro FECHA de tipo fecha. Para ejecutar la sentencia, la aplicación debe dar un valor al parámetro y abrir el Query : Query.ParamValues['FECHA'] := Fecha; Query.Open; Saludos. |
gracias guillotmarc
nada mas que tuve que poner estas lineas adoquery1.Parameters.ParamValues['fecha']:=FormatDateTime('mm/dd/yyyy',MonthCalendar1.Date); ADOQuery1.Open; /// adoquery1.Active := false; adoquery1.Active := true; /// para que se pueda refrescar el dbgrid.... |
Hola.
Esta linea : adoquery1.Parameters.ParamValues['fecha']:=FormatDateTime('mm/dd/yyyy',MonthCalendar1.Date); Quedaría mejor, simplemente con : adoquery1.Parameters.ParamValues['fecha']:=MonthCalendar1.Date; Ahora estás haciendo una serie de transformaciones : De Fecha a Cadena a Variant Cadena y finalmente a Fecha de nuevo. Saludos. |
disculpa la demora .. gracias por las observaciones...
gracias |
La franja horaria es GMT +2. Ahora son las 02:30:19. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi