Frage

Ich habe eine Firebird-Datenbank (läuft auf Server-Version 2.1.3) und es mit Delphi 2007 anschließe die DBExpress Objekte mit (den Interbase-Treiber)

Einer meiner Tabellen in der Datenbank etwa wie folgt aussieht

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

Ich kann in die Tabelle auf OK und in Flame Robin es zeigt den Zeitstempel-Feld einen Wert in Millisekunden hat.

Aber wenn ich eine auswählen alle (select * from MYTABLE) tun auf dem Tisch kann ich den Wert in Millisekunden bekommen, da es immer als 000 zurückgegeben wird.

verursacht Diese große Probleme, da es Teil des Primärschlüssels ist (leider habe ich nicht die Tabelle entwerfen und haben keine Macht, es zu ändern).

Ich habe das versucht, im Anschluss an den Millisekunden-Wert zu erhalten:

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

Aber sie alle zurückkehren 14.09.2009 14: 25:. 06.000, wenn formatiert

Wie rufe ich die Millisekunde von einem Zeitstempel?

UPDATE: Für den Fall, das hilft jemand in der Zukunft, hier sind die Treiber ich für DBExpress und die Ergebnisse versucht.

War es hilfreich?

Lösung

Ich weiß nicht, ob Firebird tatsächlich Millisekunden unterstützt, aber ich weiß für eine Tatsache, dass die Interbase-Treiber für Delphi 2007 nicht. Dies liegt daran, Interbase nicht Millisekunden in seinem C-API zurückgeben; obwohl Interbase speichert Datetime auf Sub-Millisekunden Präzision, kehrt die API Interbase-mal in einem C struct TM, das kein Millisekunde Feld enthält. Daher wird der dbExpress-Treiber entwickelt für Interbase nicht gehen zu unterstützen. Also, müssen Sie auf einem Minimum Treiber ändern, vorausgesetzt, dass Firebird tatsächlich diese unterstützt überhaupt.

Andere Tipps

Ein Kollege von mir ( Edwin van der Kraan ) nur geprüft: es funktioniert mit FIBPlus !

Er überprüfte mit FIBPlus Version 6.9.6 und Firebird 2.1.1.

Er inserte einen current_timestamp Einsatz und extrahiert es mit FormatDateTime('dd-mm-yyyy hh:nn:ss:zzz', TestpFIBDataSetMYDATE.Value) Dann bekam er das Datum und die Zeit mit Millisekunden zurück.

- jeroen

Firebird FAQ # 305 erklärt, wie leicht durch einfachen varchar CAST, dies zu umgehen.

Firebird dbx Treiber existieren (Sie können sie versuchen):

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

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top