![]() |
AW: Termine anzeigen
Gibt es bei IBO einen Abfrage-Monitor?
|
AW: Termine anzeigen
Was ich nicht so ganz verstehe ist, dass dein select ausschließlich eine Anzahl (Count) liefert, du aber schreibst, dass Termine mit dem falschen Datum angezeigt werden. Ist dein select dann doch eher ein select *?
|
AW: Termine anzeigen
Hallo Mkinzler,
ja gibt es, den habe ich auch gerade probiert.
Delphi-Quellcode:
So geht es. Nehme ich allerdings das Komma zwischen Datum und Uhrzeit weg gibt es ein Conversion error to String.
select
count(E.patientennummer) as Anzahl from events E where (E.patientennummer = 16) and (E.startzeit > '23.11.2015,11:00:00') and (E.FINISH <= '23.12.2015,15:00:00') In Delphi wird aber der Parameter now ohne Komma übergeben. Muss jetzt mal testen wie ich das hinbekomme. |
AW: Termine anzeigen
Dann stimmt estwas nicht. Bei FireBird ist eine TimeStamp kein String sondern ein Integer. Zudem sollten die Parameter gesendet werden und nicht die Werte der Parameter.
|
AW: Termine anzeigen
Wie sieht denn das Create-Statement für die events-Tabelle aus? :stupid:
|
AW: Termine anzeigen
Habe es gelöst. So geht es.
Delphi-Quellcode:
Termineqry.Close;
Termineqry.ParamByName('Patientennummer').AsInteger := Patient1Qry.FieldByName('Patientennummer').AsInteger; Termineqry.ParamByName('Startdatum').asString := DateTimeToStr(Now); Termineqry.ParamByName('ENDDATUM').asString := DateTimeToStr(now + dmMain.ibqryOptionen.FieldByName('TERMINTAGE').AsInteger); Termineqry.Open; |
AW: Termine anzeigen
Mit unnötigem(n) Umweg(en): TimeStamp -> String -> TimeStamp, wenn Deine Angabe des Typs des Feldes (TimeStamp) stimmt.
|
AW: Termine anzeigen
Zitat:
Delphi-Quellcode:
Für meine Begriffe sind die beiden Abfragen (technisch) nicht miteinander vergleichbar.
Termineqry.Close;
Termineqry.ParamByName('Patientennummer').AsInteger := Patient1Qry.FieldByName('Patientennummer').AsInteger; Termineqry.ParamByName('Date').AsString := '23.11.2015 11:00:00'; Termineqry.ParamByName('ENDDATUM').AsString := '23.12.2015 15:00:00'); Termineqry.Open; Sollte der Datentyp in der DB tatsächlich TimeStamp sein, so muss IBExpert hier also auf irgendeine Weise eine Typkonvertierung machen, deren Ergebnis dem erwarteten entspricht. Now ist in Delphi vom Typ TDateTime und TDateTime wiederum von Typ Double. Der ganzzahlige Anteil entspricht der den Tagen seit dem 30.12.1899, der Nachkommaanteil der Zeit nach Mitternacht. Heute ist der 42331 (23.11.2015). 0.47917 entspricht 11:30 Uhr. 0.333334 entspricht 08:00 Uhr. 0.625 entspricht 15:00 Uhr. 42361 entspricht dem 23.12.2015. Für vergleichbare Ergebnisse (hoffentlich) ohne Typkonvertierung müsste die Abfrage im IBExpert also lauten:
Delphi-Quellcode:
und unter Delphi
select
count(E.patientennummer) as Anzahl from events E where (E.patientennummer = 16) and (E.startzeit > 42331.47917) and (E.FINISH <= 42361.625)
Delphi-Quellcode:
Bei diesen beiden Abfragen erwarte ich identische Ergebnisse. Ist dem so?
Termineqry.Close;
Termineqry.ParamByName('Patientennummer').AsInteger := 16; Termineqry.ParamByName('Date').AsDateTime := 42331.47917; Termineqry.ParamByName('ENDDATUM').AsDateTime := 42361.625); Termineqry.Open; Andernfalls würde ich den Fehler weniger in der Korrektheit der Abfrage, als in Konvertierungsproblemen bei den Datentypen, erwarten. Die Umschiffung des Problemes mit mehrfachen Typkonvertierungen halte ich für suboptimal, das mag jetzt im konkreten Fall funktionieren, aber ob das jetzt und für alle Zeiten funktioniert? Auf eine derartige "Krücke" würde ich mich nicht verlassen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz