Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problemas con fechas en SQLite (https://www.clubdelphi.com/foros/showthread.php?t=89140)

wilcg 02-10-2015 07:33:23

Problemas con fechas en SQLite
 
Hola amigos del foro, tengo un problema muy raro con las fechas en SQLite los guardo en la base de datos correctamente pero a la hora de mostrarlo en un dbgrid me cambia la fecha por esta 30/12/1899, he revisado como esta almacenado en el campo y resulta que esta bien, solo que al mostrarlo me cambia de fecha ¿que esta pasando, alguien puede darme una explicación?. es algo raro ¿como lo soluciono?.
Código SQL [-]
CREATE TABLE "clientes" (  
  "codigo" INTEGER PRIMARY KEY  NOT NULL ,   
  "cliente" VARCHAR DEFAULT 80,   
  "fecha_registro" DATETIME DEFAULT CURRENT_DATE,   
  "fecha_edicion" DATETIME DEFAULT CURRENT_DATE,  )

Casimiro Notevi 02-10-2015 10:07:50

¿Cómo lo guardas? ¿cómo lo lees?

Neftali [Germán.Estévez] 02-10-2015 10:42:21

Normalmente ese valor de fecha que muestras corresponde a la fecha nula.
Eso te puede indicar que la fecha almacenada es nula o incorrecta.

Prueba si hay diferencia, si almacenas fechas como estas: "01/13/2015" o "13/01/2015" (pensando en diferentes formatos de almacenarla).

Intenta dar algún datos más.

AgustinOrtu 02-10-2015 15:13:18

En teoría sqlite no soporta fechas. FireDAC por ejemplo hace un mapeo automáticamente de fecha a string

Pero de forma nativa no

mamcx 02-10-2015 17:14:21

Eso es porque almacenas fecha con un locale/formato que depende del pais. La forma correcta es guardar en formato ISO:

https://www.sqlite.org/lang_datefunc.html

Casimiro Notevi 02-10-2015 17:52:15

Yo uso el formato datetime de "toda la vida", ejemplo: 2456572.84952685

wilcg 02-10-2015 17:58:14

Gracias amigos por sus respuestas, boy a investigar lo que menciona mamcx.

wilcg 02-10-2015 18:28:47

A ver entonces la forma correcta de guardar una fecha y hora en SQLite sería asi:
Código Delphi [-]
  with Query1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('Insert Into clientes (codigo,cliente,fecha_registro,hora_registro)');
    SQL.Add(' Values (:codigo,:cliente,:fecha_registro,:hora_registro)');
    Parambyname('codigo').Value := txtCodigo.Text;
    Parambyname('cliente').AsString := txtCliente.Text;
    Parambyname('fecha_registro').Value := FormatDateTime('YYYY-MM-DD', Date);
    Parambyname('hora_registro').Value := FormatDateTime('HH:MM:SS', Time);
    ExecSQL;
  end;


La franja horaria es GMT +2. Ahora son las 13:19:45.

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