Pregunta

Tengo una base de datos Firebird (ejecutándose en el servidor versión 2.1.3) y me estoy conectando con Delphi 2007 usando los objetos DBExpress (usando el controlador Interbase)

Una de mis tablas en la base de datos se parece a esto

CREATE TABLE MYTABLE
(
  MYDATE Timestamp NOT NULL,
  MYINDEX Integer NOT NULL,
  ...
  Snip
  ...
  PRIMARY KEY (MYDATE ,MYINDEX)
);

Puedo agregar a la tabla OK, y en Flame Robin muestra que el campo de marca de tiempo tiene un valor de milisegundos.

Pero cuando hago una selección de todo ( select * from MYTABLE ) en la tabla no puedo obtener el valor de milisegundos, ya que siempre se devuelve como 000.

Esto causa problemas importantes ya que es parte de la clave principal (desafortunadamente no diseñé la tabla y no tengo autoridad para cambiarla).

He intentado lo siguiente para obtener el valor de milisegundos:

sql1.fieldbyname('MYDATE').AsDateTime;
sql1.fieldbyname('MYDATE').AsSQLTimeStamp;
sql1.fieldbyname('MYDATE').AsStirng;
sql1.fieldbyname('MYDATE').AsFloat;

Pero todos regresan 14/09/2009 14: 25: 06.000 cuando se formatean.

¿Cómo recupero el milisegundo de una marca de tiempo?

ACTUALIZACIÓN: En caso de que esto ayude a alguien en el futuro, aquí están los controladores que probé para DBExpress y los resultados.

¿Fue útil?

Solución

No sé si Firebird realmente admite milisegundos, pero sé con certeza que el controlador InterBase para Delphi 2007 no. Esto se debe a que InterBase no devuelve milisegundos en su API de C; aunque InterBase almacena DateTimes con una precisión inferior a milisegundos, la API de InterBase devuelve tiempos en una estructura C TM que no contiene un campo de milisegundos. Por lo tanto, el controlador dbExpress diseñado para InterBase no lo admitirá. Por lo tanto, deberá cambiar los controladores como mínimo, suponiendo que Firebird realmente lo admita.

Otros consejos

Un colega mío ( Edwin van der Kraan ) acaba de comprobar: funciona con FIBplus !

Comprobó con FIBPlus versión 6.9.6 y Firebird 2.1.1.

Insertó una inserción current_timestamp y la extrajo con FormatDateTime ('dd-mm-aaaa hh: nn: ss: zzz', TestpFIBDataSetMYDATE.Value) Luego recuperó la fecha y la hora, incluidos milisegundos.

--jeroen

Firebird FAQ # 305 explica cómo solucionar esto fácilmente a través de varchar CAST simple.

Existen controladores Firebird dbx (puede probarlos):

http://sites.google.com/site/dbxfirebird/ (gratis )

http://www.upscene.com/products.dbx.dbx_fb.php

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top