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)