Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird/Interbase: Probleme mit Datum (https://www.delphipraxis.net/31697-firebird-interbase-probleme-mit-datum.html)

Ralf Stehle 12. Okt 2004 19:31


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:
Select * from UDat Where (Year(Untersuchungsdatum) = ' + FormatDateTime('yyyy', Now) + ' AND Day(Untersuchungsdatum) = ' + FormatDateTime('dd', Now) + ' AND Month(Untersuchungsdatum) = ' + FormatDateTime('mm', Now) + ')
Für den SQL-Server habe ich folgendes erfolglos probiert (Datum ist ein Datum in deutscher Schreibweise z.B. 19.01.2003):
:gruebel:
Delphi-Quellcode:
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) + '');
Wenn jemand eine Lösung hat, wäre ich nach stundenlanger Internetrecherche sehr glücklich

:wall:

Gruber_Hans_12345 12. Okt 2004 19:34

Re: Firebird/Interbase: Probleme mit Datum
 
was ist Untersuchungsdatum für ein Typ ?

Gruber_Hans_12345 12. Okt 2004 19:36

Re: Firebird/Interbase: Probleme mit Datum
 
wenn Untersuchungsdatum ein Timestamp ist :
Delphi-Quellcode:
WHERE CAST(Untersuchungsdatum AS DATE) = CURRENT_DATE
wenn Untersuchungsdatum ein Datum ist :
Delphi-Quellcode:
WHERE Untersuchungsdatum = CURRENT_DATE

Hansa 12. Okt 2004 19:41

Re: Firebird/Interbase: Probleme mit Datum
 
Geht es jetzt um die Umstellung des Programmes, oder der Daten ? :shock:

Ralf Stehle 12. Okt 2004 20:03

Re: Firebird/Interbase: Probleme mit Datum
 
Habe eure Vorschläge gerade probiert

Delphi-Quellcode:
Select * from UDat WHERE CAST(Untersuchungsdatum AS DATE) = CURRENT_DATE

Select * from UDat WHERE Untersuchungsdatum = CURRENT_DATE
Beide Lösungsvorschläge ergeben die gleiche Fehlermeldung:
"12.10.2004 ist kein gültiger Datums- und Zeitwert"

Untersuchungsdatum war in der MS-Access-Datenbank ein Datums/Zeitfeld und in Firebird Timestamp

Lemmy 13. Okt 2004 07:20

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:
Select * from Personal_log where CAST(Datum AS DATE)=Current_Date-100
Das mit dem (Current_Date-100) habe ich gebraucht, damit die SQL auch ein Ergebnis hat (bei mir!).

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

Gruber_Hans_12345 13. Okt 2004 07:59

Re: Firebird/Interbase: Probleme mit Datum
 
Zitat:

Zitat von Ralf Stehle
Habe eure Vorschläge gerade probiert

Delphi-Quellcode:
Select * from UDat WHERE CAST(Untersuchungsdatum AS DATE) = CURRENT_DATE

Select * from UDat WHERE Untersuchungsdatum = CURRENT_DATE
Beide Lösungsvorschläge ergeben die gleiche Fehlermeldung:
"12.10.2004 ist kein gültiger Datums- und Zeitwert"

Untersuchungsdatum war in der MS-Access-Datenbank ein Datums/Zeitfeld und in Firebird Timestamp

Welche Firebird Version hast du ?
Wo probierst du den SQL-Select aus ? zum testen mal in der IBConsole oder ähnlichen.
Bei Firebird v1.5 Funktioniert das mit Timestamp definitiv !

Ralf Stehle 13. Okt 2004 09:23

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:

DelphiDeveloper 13. Okt 2004 14:44

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

Ralf Stehle 14. Okt 2004 06:32

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:
IBDataSet1.FieldByName('Untersuchungsdatum').Value := FormatDateTime('yyyy-mm-dd', ADODataSet1.FieldByName('Untersuchungsdatum').AsDateTime);
das Datumsformat YYYY-MM-DD erzwungen

Danach hatte die Abfrage

Delphi-Quellcode:
'Select * from UDat WHERE CAST(Untersuchungsdatum AS DATE) = CURRENT_DATE'
den gewünschten Erfolg

: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