AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi '24:00' Uhr als Parameter an Query übergeben
Thema durchsuchen
Ansicht
Themen-Optionen

'24:00' Uhr als Parameter an Query übergeben

Ein Thema von MatthiasR · begonnen am 8. Okt 2010 · letzter Beitrag vom 8. Okt 2010
 
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#1

'24:00' Uhr als Parameter an Query übergeben

  Alt 8. Okt 2010, 08:29
Datenbank: PostgreSQL • Version: 8,.4 • Zugriff über: UniDAC
Wir verwenden die UniDAC-Komponenten, um auf eine PostgreSQL-Datenbank zuzugreifen. In der Datenbank existieren verschiedene Tabellen, in die Uhrzeiten eingetragen werden (Datentyp: time without time zone). Es handelt sich immer um Anfangs- und Endzeiten, wobei die Endzeiten auch den Wert '24:00' Uhr annehmen können. PostgreSQL unterscheidet 0 Uhr und 24 Uhr voneinander, ich weiß nicht, wie es sich da bei anderen DBMS verhält. Bei Delphi gehört 24 Uhr ja quasi schon zum nächsten Tag, da der Nachkommawert eines TDateTime dann wieder voll ist. Daher kann 24 Uhr auch nicht als TDateTime-Parameter übergeben werden.

Aus diesem Grund übergeben wir time-Werte bei Abfragen immer als string-Parameter an die Query und casten den string innerhalb des SQL-Statement auf einen time-Wert. Also z.B. in der Form:

Code:
SELECT * FROM tabelle WHERE uhrzeit BETWEEN cast(:anfang AS time) AND cast(:ende AS time)
Die Parameter belegen wir dann folgendermaßen:

Code:
Query.ParamByName('anfang').AsString := '18:00';
Query.ParamByName('ende').AsString := '24:00';
Sobald die Query jedoch geöffnet wird, wird ein EConvertError ausgelöst der besagt:

"Hour is out of range."

Was ich mich an der Stelle frage, ist, an was die Query hier festmacht, dass der übergebene Parameter einen Zeittyp darstellt, ich übergebe ihn ja explizit als string. Ich hab auch schon versucht, den FieldType der Parameter hart auf ftString zu setzen, hat aber nichts gebracht.

Was ich halt auch nicht weiß, ob das eine "Spezialität" der UniDAC-Komponenten ist, oder ob das Verhalten von einer Delphi-Basisklasse wie dem TDataSet geerbt wurde und sich somit alle Query so verhalten.

Wie kann ich das Beheben, ohne auf die Verwendung von Parametern verzichten zu müssen? Wenn ich die "24:00" hart in das SQL-Statement reinschreibe, dann klappt der Aufruf nämlich.

Geändert von MatthiasR ( 8. Okt 2010 um 08:32 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz