Ich habe folgendes Problem:
Ich habe eine ADOQuery, die mehrere Einträge enthält, darunter eine Zeit und gehe diese dann einzeln durch. Für jede Zeile muss ich weitere Daten ermitteln, was ich über eine zwei ADOQuery löse. Der Schlüssel hierbei ist die Zeit, der die beiden Queries 1:1 miteinander verbindet.
Da das Programm auf verschiedenen Regionaleinstellungen und Betriebsystemen laufen soll, mache ich diesen Zeitvergleich über einen Parameter.
Vereinfacht also so:
Den Parameter "Zeit" setze ich dann auf die Zeit der anderen ADOQuery:
Ich öffne daraufhin die Zweite Query, was auch erstmal funktioniert (ADOQuery2->Active ist true), allerdings gibt es kein Ergebnis zurück (ADOQuery2->RecordCount ist 0). Das heißt der Zeitvergleich hat kein Ergebnis zurückgeliefert, obwohl in der Datenbank jeweils die gleiche Zeit steht.
Nach etwas debuggen habe ich gemerkt, dass die Zeit, die mir in der Datenbank angezeigt wird "13:00:15" ist während die Zeit, die mir der Parameter zurückgibt, "13:00:16" ist. Also eine Sekunde Unterschied! Der SQL Server sagt daraufhin "Nein die sind nicht gleich".
Ich vermute, dass entweder im float oder im varient, die Zeit nicht ganz exakt gespeichert wird und daher eine Ungenauigkeit entsteht.
Gibt es andere mit dem Problem. Wie würdet ihr es lösen?
Meine temporäre Lösung ist es den Zeitvergleich 'unscharf' zu machen sprich:
WHERE Zeit > :Zeit-0.0002
AND Zeit < :Zeit+0.0002
Das funktioniert zwar, ist aber problematisch, da dadurch auch mal zwei Zeilen zurückkommen können und ich diese dann nicht eindeutig zuordnen kann.
Ich habe eine ADOQuery, die mehrere Einträge enthält, darunter eine Zeit und gehe diese dann einzeln durch. Für jede Zeile muss ich weitere Daten ermitteln, was ich über eine zwei ADOQuery löse. Der Schlüssel hierbei ist die Zeit, der die beiden Queries 1:1 miteinander verbindet.
Da das Programm auf verschiedenen Regionaleinstellungen und Betriebsystemen laufen soll, mache ich diesen Zeitvergleich über einen Parameter.
Vereinfacht also so:
Code:
SELECT * FROM Tabelle WHERE Zeit = :Zeit
Code:
ADOQuery2->Parameters->ParamByName("Zeit")->Value = ADOQuery1->FieldByName("Zeit")->AsDateTime;
Nach etwas debuggen habe ich gemerkt, dass die Zeit, die mir in der Datenbank angezeigt wird "13:00:15" ist während die Zeit, die mir der Parameter zurückgibt, "13:00:16" ist. Also eine Sekunde Unterschied! Der SQL Server sagt daraufhin "Nein die sind nicht gleich".
Ich vermute, dass entweder im float oder im varient, die Zeit nicht ganz exakt gespeichert wird und daher eine Ungenauigkeit entsteht.
Gibt es andere mit dem Problem. Wie würdet ihr es lösen?
Meine temporäre Lösung ist es den Zeitvergleich 'unscharf' zu machen sprich:
WHERE Zeit > :Zeit-0.0002
AND Zeit < :Zeit+0.0002
Das funktioniert zwar, ist aber problematisch, da dadurch auch mal zwei Zeilen zurückkommen können und ich diese dann nicht eindeutig zuordnen kann.
Comment