Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-07-2010
egbaquela egbaquela is offline
Miembro
 
Registrado: jul 2007
Posts: 21
Poder: 0
egbaquela Va por buen camino
Problema con fechas de Firebird

Hola a todos. Estoy teniendo un problema con el tipo de datos "Date" en Firebird. Cree una base de datos en Firebird y exporté masivamente datos de otra base de datos de MS Access. Los campos de tipo "Date" del MS Access los capturé así:
Código:
procedure ExportarDatos
var
         DTFecha: string;
         Dia, Mes, Anio : word;
         ...
begin
         ...
         if  dmdDataMod.SQLTabla.FieldByName('DTFecha').AsString = '' then
            DTFecha:= 'NULL'
         else
         begin
            DecodeDate(dmdDataMod.SQLITabla.FieldByName('DTFecha').AsDateTime, Anio, Mes, Dia);
            DTFecha :=  '''' + inttostr(Dia) + '.' + inttostr(Mes) + '.' + inttostr(Anio) + '''';
         end; 
        ...
Y para cargar los datos a la base firebird utilicé la siguiente consulta SQL (dentro del mismo procedimiento anterior):
Código:
      with SQLEjecutable do begin
         close;
         sql.clear;
         sql.add('INSERT INTO tblTabla(..., DTFecha,... ) VALUES (... +', ' + DTFecha +',  ' ...);
         readonly:= true;
         usePrimaryKeyAsKey:= false;
      end;
      if SQLTransaction.Active then SQLTransaction.Commit;
      SQLTransaction.StartTransaction;
      SQLEjecutable.ExecSQL;
      SQLTransaction.Commit;
Los datos se graban correctamente, y al utilizar un SELECT también me aparecen con el valor correcto. El problema es cuando actualizo registros desde el cliente de la aplicación (ya no de Access, sinó desde Lazarus). Los registros los actualizo con el siguiente código:
Código:
procedure actualizarRegistro
var
   strFecha: string;
   Dia, Mes, Anio : word;
begin
   DecodeDate(deFecha.Date  , Anio, Mes, Dia);
   strFecha := '''' + inttostr(Dia) + '.' + inttostr(Mes) + '.' + inttostr(Anio) + '''';
   with SqlQuery do begin
      close;
      sql.clear;
      sql.add('UPDATE tblIsometricos SET dtFecha = ' + strFecha + ' WHERE IDReg = ' +  SQLTabla.FieldByName('IDReg').AsString);
      readonly:= true;
      usePrimaryKeyAsKey:= false;
   end;
   if SQLTransaction.Active then SQLTransaction.Commit;
   SQLTransaction.StartTransaction;
   SQLQuery.open ; 
end;
Donde "deFecha" es un TDateEdit de form que ejecuta el procedimiento, "SQLQuery", "SQLTabla" y "SQLEjecutable" son TSQLQuery, "SQLTransaction" es un SQLTransaction.
Cuando hago un SELECT y muestro los resultados en un TDBGrid, las fechas me parecen en el formato del sistema operativo (Windows XP en mi caso), el cual es DD/MM/YYYY. Pero, cuando exporto el contenido de la tabla a un archivo "TXT", las fechas que se cargaron en forma masiva siguen respetanto el formato DD/MM/YYYY pero la que se agregaron desde el cliente se cambian al formato MM/DD/YYYY, por mas que en el TDBGrid se muestren como DD/MM/YYYY. La obtención de la fecha para la exportación la realizo con el siguiente código:
Código:
var
    strFecha: string;
    ...
begin
    ...
    strFecha:= SQLTabla.FieldByName('dtFecha').AsString;
    ...
end;
Cualquier exportación dispone tanto de registros "nuevos" como de los cargados masivamente. Lo que me desconcierta es que este cambio de formato lo realiza solo para los registros "nuevos", los registros cargados masivamente se comportan correctamente (es decir, tanto en el TDBGrid como en el archivo de texto generado mantienen el mismo formato).
¿Alguien sabe por que puede estar pasando esto?.
Saludos, Gabriel.

PD: la versión de lázarus que uso es la 0.9.27.
www.egbaquela.com.ar
Responder Con Cita
  #2  
Antiguo 05-07-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.096
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Me he perdido un poco en tu explicación, pero hay algo que no entiendo, si usas un campo del tipo date para las fechas, ¿por qué usas una variable string para trabajar con ella?. Debes usar un tdatetime, salvo que conviertas el string en date, pero no me ha parecido verlo en tu código.
Responder Con Cita
  #3  
Antiguo 05-07-2010
egbaquela egbaquela is offline
Miembro
 
Registrado: jul 2007
Posts: 21
Poder: 0
egbaquela Va por buen camino
Hola: la variable string la uso para armar la sentencia SQL. PAso las fechas a un string y después la concateno con el resto de la sentencia SQL. En estos procedimientos no hago ninguna otra operación con las fechas.
Saludos, Gabriel.
Responder Con Cita
  #4  
Antiguo 05-07-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.096
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pero lo que no me queda claro es el problema en sí, ¿que te sale con distinto formato?
Responder Con Cita
  #5  
Antiguo 06-07-2010
egbaquela egbaquela is offline
Miembro
 
Registrado: jul 2007
Posts: 21
Poder: 0
egbaquela Va por buen camino
Bueno, el campo fecha de cada registro lo escribo de dos formas, con un INSERT al crear un registro nuevo o con un UPDATE para modificarlo, ambos con el formato dd.mm.yyyy . Cuando los visualizo en el dbgrid, tanto las fechas cargadas en el INSERT como las actualizadas con UPDATE se ven en formato dd/mm/yyyy, pero cuando exporto el contenido de la tabla a un TXT (copiando el valor del campo a un string mediante "fieldByName" de un TSQLQuery), los datos cargados de la primer forma me los lee en formato dd/mm/yyyy, mientras que los que se cargaron mediante la consulta de actualización se leen en formato mm/dd/yyyy (aunque en el dbgrid se leen de otra forma).
Saludos, Gabriel.
Responder Con Cita
  #6  
Antiguo 06-07-2010
egbaquela egbaquela is offline
Miembro
 
Registrado: jul 2007
Posts: 21
Poder: 0
egbaquela Va por buen camino
Revisando la tabla con el IBAccess, todos los registros están cargados en formato MM/DD/YYYY (como los almacena Firebird), pero según como se haya cargado el dato me los sigue mostrando en forma diferente.
Probé capturar la fecha mediante un DecodeDate en vez de utilizar el FieldByName().AsString, pero sigo teniendo el mismo problema.

Por Ejemplo, el IBAcces me muestra esto:

CampoFecha
05/16/2010 00:00:00
05/19/2010 00:00:00
05/21/2010 00:00:00
06/01/2010 00:00:00

Haciendo una consulta y mostrandola en un dbGrid obtengo:

CampoFecha
16/05/2010
19/05/2010
21/05/2010
01/06/2010

Pero al leer un registro a la vez y guardar su contenido en un string obtengo:

16/05/2010
19/05/2010
21/05/2010
06/01/2010 -- (Este es el error)

Estoy totalmente desconcertado ¿?
Saludos, Gabriel.
Responder Con Cita
  #7  
Antiguo 06-07-2010
egbaquela egbaquela is offline
Miembro
 
Registrado: jul 2007
Posts: 21
Poder: 0
egbaquela Va por buen camino
Bueno, al final lo pude solucionar pero no muy ortodoxamente: en vez de consultar la tabla, consulto una vista de SQL que en vez del campo fecha tiene los campos día, mes y año extraidos con las funciones Day, Month y Year de Firebird. Después, concateno los valores en un string.
Igual, me quedó la duda de porque Lazarus se comporta así.
Saludos, Gabriel.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Firebird dialect 3 y fechas IVAND Firebird e Interbase 5 17-09-2008 19:16:48
firebird y fechas jmlifi Varios 4 05-09-2007 09:54:59
Fechas en Firebird Puche Firebird e Interbase 3 27-07-2006 10:09:52
Consultar fechas en firebird (SQL) pepitu Firebird e Interbase 7 28-09-2005 19:19:23
Formato de fechas en FireBird 1.5 defcon1_es Firebird e Interbase 1 02-04-2004 17:02:52


La franja horaria es GMT +2. Ahora son las 22:46:31.


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
Copyright 1996-2007 Club Delphi