Domanda

Ho un database Firebird (in esecuzione sul server versione 2.1.3) e mi sto collegando ad esso con Delphi 2007 usando gli oggetti DBExpress (usando il driver Interbase)

Una delle mie tabelle nel database è simile a questa

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

Posso aggiungere alla tabella OK, e in Flame Robin mostra che il campo timestamp ha un valore di millisecondi.

Ma quando seleziono tutto ( select * da MYTABLE ) sulla tabella non riesco a ottenere il valore in millisecondi, poiché viene sempre restituito come 000.

Ciò causa grossi problemi in quanto fa parte della chiave primaria (purtroppo non ho progettato la tabella e non ho l'autorizzazione per cambiarla).

Ho provato quanto segue per ottenere il valore in millisecondi:

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

Ma tutti restituiscono 14/09/2009 14: 25: 06.000 quando formattati.

Come posso recuperare il millisecondo da un timestamp?

UPDATE: Nel caso in cui questo aiuti qualcuno in futuro, ecco i driver che ho provato per DBExpress e i risultati.

È stato utile?

Soluzione

Non so se Firebird supporta effettivamente i millisecondi, ma so per certo che il driver InterBase per Delphi 2007 non lo è. Questo perché InterBase non restituisce millisecondi nella sua API C; sebbene InterBase memorizzi DateTimes con precisione inferiore ai millisecondi, l'API InterBase restituisce i tempi in una struttura C TM che non contiene un campo di millisecondi. Pertanto, il driver dbExpress progettato per InterBase non lo supporterà. Quindi, dovrai cambiare i driver come minimo, presumendo che Firebird lo supporti effettivamente.

Altri suggerimenti

Un mio collega ( Edwin van der Kraan ) appena verificato: funziona con FIBplus !

Ha verificato con FIBPlus versione 6.9.6 e Firebird 2.1.1.

Ha inserito un inserto current_timestamp ed è stato estratto con FormatDateTime ('dd-mm-yyyy hh: nn: ss: zzz', TestpFIBDataSetMYDATE.Value) Quindi ha recuperato la data e l'ora inclusi i millisecondi.

- Jeroen

Firebird FAQ # 305 spiega come aggirare facilmente questo problema tramite il semplice varchar CAST.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top