Einzelnen Beitrag anzeigen

BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
495 Beiträge
 
Delphi 12 Athens
 
#1

Datentyp DateTime und Millisekunden

  Alt 17. Jan 2009, 21:21
Datenbank: MSSQL • Version: 2005 • Zugriff über: "SQL Native Client" und ADO
Hallo zusammen,

in einer Tabelle speicher ich Zeiten und benötige dafür auch die Millisekunden. Bisher habe ich den "Microsoft OLE DB Provider for SQL Server" verwendet und die Daten wie folgt eingefügt:

Delphi-Quellcode:

{ INSERT erzeugen (gekürzt) }
QueryAdd.SQL.Clear;
QueryAdd.SQL.Add('INSERT ProdData ' +
                 '(TimeGMT)' +
                 'VALUES'+
                 '(:TimeGMT)');

{ Parameter "Time" als String, damit Millisekunden gespeichert werden können }
QueryAdd.Parameters.ParamByName('TimeGMT').DataType := ftString;

{ Zeitwert zuweisen }
QueryAdd.Parameters.ParamByName('TimeGMT').Value := FormatDateTime('yyyy.mm.dd hh:nn:ss.zzz', DataLogRec.TimeGMT);

{ INSERT ausführen }
QueryAdd.ExecSQL;
Das hat auch immer bestens funktioniert. Aus diversen Gründen habe ich jetzt aber auf den "SQL Native Client" umgestellt. Da geht es so nicht mehr. Wenn ich das ganze wie folgt kürze, werden auch nur immer ganze Sekunden gespeichert:

Delphi-Quellcode:

{ INSERT erzeugen (gekürzt) }
QueryAdd.SQL.Clear;
QueryAdd.SQL.Add('INSERT ProdData ' +
                 '(TimeGMT)' +
                 'VALUES'+
                 '(:TimeGMT)');

{ Zeitwert zuweisen }
QueryAdd.Parameters.ParamByName('TimeGMT').Value := DataLogRec.TimeGMT;

{ INSERT ausführen }
QueryAdd.ExecSQL;
Das Problem ist halt, dass pro Sekunde mehrere Werte erzeugt werden können. Im Extremfall sind es 10 Werte pro Sekunde. Diese werden vor der Zuweisung immer auf Zehntelsekunden gerundet. Da es sich um ein Datenfeld mit einem eindeutigen Index handelt kommt natürlich die "Duplicate Key" Fehlermeldung...

Hat irgendwer eine Idee wie ich dem Datenfeld die Sekundenbruchteile beibringen kann?

Vielen Dank schonmal

Alex
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat