FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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; ... 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; 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; 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; ¿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 |
#2
|
||||
|
||||
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.
|
#3
|
|||
|
|||
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. |
#4
|
||||
|
||||
Pero lo que no me queda claro es el problema en sí, ¿que te sale con distinto formato?
|
#5
|
|||
|
|||
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. |
#6
|
|||
|
|||
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. |
#7
|
|||
|
|||
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. |
|
|
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 |
|