Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con fechas (https://www.clubdelphi.com/foros/showthread.php?t=34212)

mcarazas 01-08-2006 16:00:55

Problema con fechas
 
Hola amigos del foro:

Tengo un problema con fechas, la situación es la siguente:

En un stringGrid descargo todas las fechas que tengo en mi base de datos los descargo y les pongo formato con FormatDateTime ('dd/mm/yyyy', fecha) en el celda del StringGrid se muestra por ejemplo 01/08/2006 hasta ahi todo esta bien, pero cuando quiero volver a guardar los mismos datos a mi base de datos que es PostGreSQL, para esto utilizo la instruccion StrToDateTime para volver a darle formato a las fechas que estan en formato de cadena, el problema es que esta instruccion lo guarda como esta definida la cadena, mi problema es que a la hora de ver en mi base de datos las fechas estan cambiadas por ejemplo la fecha que estaba en la base de datos es 01/08/2006 en el grid pero en la base de datos esta como 2001/08/06 lo ha invertido.

Como puedo dar solucion a este problema, espero su ayuda gracias

Lepe 01-08-2006 16:19:13

01/08/2006
2001/08/06

Curioso, si señor, le resta cinco años y despues le suma 6 días :D :D.

Supongo que la segunda fecha querías decir 2006/08/01. ¿qué programa usas para ver la fecha en la base de datos? Quizás está ahí el problema, el programa que usas, utiliza el formato aaaa/mm/dd. como sabes una fecha es sólamente los días que han transcurrido desde el día del calendario Base 31/12/1899, por tanto, da igual el formato que se guarde la fecha, siempre y cuando corresponda a la misma fecha (vaya juego de palabras... :D).

Si tienes guardado 01 de agosto de 2006 en formato mm/dd y despues lo interpretas con formato dd/mm ahí si tienes un gran problema, ya que estarías diciendo que es 8 de enero.

Conclusión: da igual el formato que uses siempre y cuando uses el mismo formato para mostrar una fecha y guardarla.

Saludos

mcarazas 01-08-2006 23:17:59

Error
 
Gracias por responder pero me sigue saliendo error, el programa que utilizo es el PgAdmin te mando un poco del codigo que estoy utilizando:

Código Delphi [-]

GetLocaleFormatSettings(GetUserDefaultLCID, MySettings);
  MySettings.DateSeparator := '/';
  MySettings.TimeSeparator := ':';
  MySettings.ShortDateFormat := 'dd/mm/yy';
  MySettings.ShortTimeFormat := 'hh:mm:ss';

while Not SQLTres.Eof do
  begin
    i := i + 1;
    with SG do
    begin
      RowCount:=RowCount + 1;
//Coloco en el grid la fecha de la base de datos para mostrar y modificar
     
Cells[4,i]:= FormatDateTime(SQLTres.FieldByName('kar_finicio').AsDateTime,MySettings);


    end;
    SQLTres.Next;
  end;

//Es de donde capturo la fecha que quiero guardar
fechaInicio := StrToDateTime(Cells[4,i]);
//A la hora de guardar invierte la fecha si los datos son coherentes lo guarda pero si no me sale un error del motor de base de datos donde dice que el rango no es valido

El formato de la base de datos es yyyy/mm/dd, como soluciono este problema, espero puedas ayudarme gracias

Lepe 02-08-2006 01:51:06

Para recuperarlo de la forma correcta de tu BBDD, lo único que necesitas es esto:
Código Delphi [-]
Cells[4,i]:= FormatDateTime('dd/mm/yyyy',          
             SQLTres.FieldByName('kar_finicio').AsDateTime);

Para asignar una fecha a un campo usa:
Código Delphi [-]
  fechaInicio := StrToDateTime(Cells[4,i]);
  sqltres.FieldByName('kar_finicio').AsDateTime := fechaInicio;
El punto está en usar ".AsDateTime := " dejando que delphi resuelva el formato con tu BBDD. Tú te quitas de problemas.

Tarde o temprano, necesitarás pedir un listado por rango de fechas, en ese caso, haz lo mismo, que delphi se encargue de traducir las fechas:
Código Delphi [-]
  query.sql.text := ' select * from tabla where kar_finicio >= :fInicio';
  query.Parambyname('fInicio').AsDateTime := StrToDateTime(Cells[4,2]);

Saludos

mcarazas 02-08-2006 18:23:09

Agradecimiento
 
Te cuento que resolvi el problema, pero la solución que me diste ya la probé al principio y tengo el mismo error, la solución que tome es intercambiar la fecha como una cadena de texto e inverti la cadena, y asi solucione el problema.


La franja horaria es GMT +2. Ahora son las 11:20:08.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi