![]() |
Firebird/Interbase: Probleme mit Datum
Ich möchte meine Datenbank von MS-Access auf Firebird/Interbase umstellen.
Bei Abfrage der Daten kann ich das Datumsproblem aber nicht lösen: Mit MS-Access (AdoConnection) hatte folgende Select-Anweisung funktioniert:
Delphi-Quellcode:
Für den SQL-Server habe ich folgendes erfolglos probiert (Datum ist ein Datum in deutscher Schreibweise z.B. 19.01.2003):
Select * from UDat Where (Year(Untersuchungsdatum) = ' + FormatDateTime('yyyy', Now) + ' AND Day(Untersuchungsdatum) = ' + FormatDateTime('dd', Now) + ' AND Month(Untersuchungsdatum) = ' + FormatDateTime('mm', Now) + ')
:gruebel:
Delphi-Quellcode:
Wenn jemand eine Lösung hat, wäre ich nach stundenlanger Internetrecherche sehr glücklich
IBQuery1.SQL.Add('Select * from UDat Where Datum = ' + now + ');
DateSeparator := '/'; IBQuery1.SQL.Add('Select * from UDat Where Format(Datum,"\#mm\/dd\/yyyy\#") = CURRENT_TIMESTAMP'); IBQuery1.SQL.Add('Select * from UDat Where Format(Datum,"\#mm\/dd\/yyyy\#") = SYSDATE'); IBQuery1.SQL.Add('Select * from UDat Where Format(Datum,"\dd\/mm\/yyyy\") = ' + FormatDateTime('dd/mm/yyyy',now) + '); IBQuery1.SQL.Add('Select * from UDat Where Format(Untersuchungsdatum,"\#mm\/dd\/yyyy\#") = ' + FormatDateTime('dd.mm.yyyy', Now) + ''); :wall: |
Re: Firebird/Interbase: Probleme mit Datum
was ist Untersuchungsdatum für ein Typ ?
|
Re: Firebird/Interbase: Probleme mit Datum
wenn Untersuchungsdatum ein Timestamp ist :
Delphi-Quellcode:
wenn Untersuchungsdatum ein Datum ist :
WHERE CAST(Untersuchungsdatum AS DATE) = CURRENT_DATE
Delphi-Quellcode:
WHERE Untersuchungsdatum = CURRENT_DATE
|
Re: Firebird/Interbase: Probleme mit Datum
Geht es jetzt um die Umstellung des Programmes, oder der Daten ? :shock:
|
Re: Firebird/Interbase: Probleme mit Datum
Habe eure Vorschläge gerade probiert
Delphi-Quellcode:
Beide Lösungsvorschläge ergeben die gleiche Fehlermeldung:
Select * from UDat WHERE CAST(Untersuchungsdatum AS DATE) = CURRENT_DATE
Select * from UDat WHERE Untersuchungsdatum = CURRENT_DATE "12.10.2004 ist kein gültiger Datums- und Zeitwert" Untersuchungsdatum war in der MS-Access-Datenbank ein Datums/Zeitfeld und in Firebird Timestamp |
Re: Firebird/Interbase: Probleme mit Datum
Guten Morgen Ralf,
im Schnelltest (Delphi 7 mit IBX 7.05 auf Firebird 1.5.1) ergab dass diese SQL Abfrage in einem TIBDataSet ohne Probleme funktioniert:
SQL-Code:
Das mit dem (Current_Date-100) habe ich gebraucht, damit die SQL auch ein Ergebnis hat (bei mir!).
Select * from Personal_log where CAST(Datum AS DATE)=Current_Date-100
Es wäre jetzt sicherlich hilfreich zu wissen mit was Du arbeitest: Version der DB, Version von DElphi, Version der IBX, stimmt die Version der Client-Bibliothek mit dem Server überein? Zudem solltest Du, wie schon so oft geschrieben, die TIBTable und TIBQuery aus deinem Programm werfen, da diese nur aus Kompatibilitätsgründen vorhanden sind! Verwende entweder TIBDataset oder TIBSQL! Grüße Lemmy |
Re: Firebird/Interbase: Probleme mit Datum
Zitat:
Wo probierst du den SQL-Select aus ? zum testen mal in der IBConsole oder ähnlichen. Bei Firebird v1.5 Funktioniert das mit Timestamp definitiv ! |
Re: Firebird/Interbase: Probleme mit Datum
Vielen Dank für Eure Hilfe. Ich verwende Delphi 6.0 und Firebird 1.5. Da ich jetzt weiß, wie es eigentlich funktionieren müsste, werde ich mir meine Daten in der Datenbank genauer anschauen.
Da die Select-Abfrage selbst korrekt ist, könnte es auch am Format des Datums in der Datenbank liegen? Alle Einträge wurden bisher mit MS-Access gemacht und daher im Format dd.mm.yyyy hh:mm:ss, in einer SQL-Datenbank ist das Format ja wahrscheinlich MM/DD/YYYY .... oder sogar YYYY-MM-DD HH:MM:SS ? Vielleicht kann ich das Formatproblem auch einfach umgehen, indem ich die Datumeinträge aus MS-Access in ein CHAR-Feld anstatt Timestamp kopiere. Wie Ihr bei meiner ersten Anfrage seht, habe ich versucht, mit der Format-Funktion das Datumsformat der Abfrage in MM/DD/YYYY umzuwandeln, das hat aber nicht geklappt. Möglicherweise war meine Formatabfrage syntaktisch falsch, da immer die Fehlermeldung kommt "Funktion unbekannt" :coder2: |
Re: Firebird/Interbase: Probleme mit Datum
waere noch interessant zu wissen welches Character set du bei der Datenbank eingestellt hast!
Generell solte man wegen Umlauten und Datumsformaten (deutsch) ISO8859_1 benutzen |
Re: Firebird/Interbase: Probleme mit Datum
Ich habe die Lösung endlich gefunden. Durch eure Hilfe wusste ich wie ich die Select-Abfrage korrekt formulieren muß. Da es danach immer noch nicht funktioniert hatte, habe ich das Datumsformat genauer beachtet:
Beim Kopieren der Daten aus der MS-Access-Datenbank in die Firebird-Datenbank habe ich ausdrücklich mit der Formatanweisung
Delphi-Quellcode:
das Datumsformat YYYY-MM-DD erzwungen
IBDataSet1.FieldByName('Untersuchungsdatum').Value := FormatDateTime('yyyy-mm-dd', ADODataSet1.FieldByName('Untersuchungsdatum').AsDateTime);
Danach hatte die Abfrage
Delphi-Quellcode:
den gewünschten Erfolg
'Select * from UDat WHERE CAST(Untersuchungsdatum AS DATE) = CURRENT_DATE'
:thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 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