🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Datumsvergleich bei Parameterabfrage mit firebird

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Heiko
Beiträge: 17
Registriert: So 2. Okt 2016, 17:49

Datumsvergleich bei Parameterabfrage mit firebird

Beitrag von Heiko » Mi 20. Nov 2024, 12:31

Hallo,
bei der Umstellung von einer internen hsql-DB auf eine externe firebird-DB bin ich bei einer Abfrage auf ein Problem gestoßen, das ich nicht gelöst bekomme:
Firebird 3
LO 24.8.2.1
Ziel ist es, in einem Formular Datensätze danach filtern zu können, ob sie vor oder nach einem Datum liegen. Ich habe also eine Filtertabelle mit u.a. zwei Datumsfeldern je eines für die Abfrage des ">=" und des "<=". In der alten DB mit hsql hatte ich diese WHERE-Klauseln:
... AND ( "datbeet" <= :qkldatbeet OR :qkldatbeet IS NULL ) AND ( "datbeet" >= :qgrdatbeet OR :qgrdatbeet IS NULL )
Leider bekomme ich immer die Fehlermeldung "Incorrect type for setString"
Das ändert sich auch nicht, wenn ich den Datentyp der Parameter klarstelle:
( "datbeet" <= CAST(:qkldatbeet AS DATE) OR :qkldatbeet IS NULL ) AND ( "datbeet" >= CAST(:qgrdatbeet AS DATE) OR :qgrdatbeet IS NULL )
Ich habe es auch schon mit DATEDIFF versucht, sobald ich Parameter einsetze, kommt o.g. Fehlermeldung.
Was mache ich falsch?
Viele Grüße
Heiko

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Datumsvergleich bei Parameterabfrage mit firebird

Beitrag von RobertG » Mi 20. Nov 2024, 18:54

Ich habe das gerade einmal mit einer internen DB getestet:

Code: Alles auswählen

SELECT * FROM "tbl_Test" WHERE "Datum" <= :qDat
funktioniert hier unter Version: 24.8.3.2 (X86_64) einwandfrei mit Firebird zusammen.
Da geht es wohl mehr um die Konstruktion mit "OR :qDat IS NULL", oder?

Code: Alles auswählen

SELECT * FROM "tbl_Test" WHERE "Datum" <= :qDat OR CAST(:qDat AS VARCHAR(50)) IS NULL
Habe ich so aus dem Kapitel zu Parameterabfragen aus dem aktuellen Handbuch.
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Heiko
Beiträge: 17
Registriert: So 2. Okt 2016, 17:49

Re: Datumsvergleich bei Parameterabfrage mit firebird

Beitrag von Heiko » Do 21. Nov 2024, 08:42

Guten Morgen Robert,

den Passus aus dem Handbuch hatte ich gelesen. Allerdings habe ich bei einer anderen Abfrage festgestellt, dass dort die Parameter korrekt funktionieren, wenn ich es folgendermaßen formuliere:
( "kultverf"."kultur" = CAST(:qkultur AS INTEGER) OR :qkultur IS NULL )

Hier fragt der Parameter nach der ID, ein INTEGER-Feld. Ohne das CAST kommt der genannte Fehler.

Die Frage nach einem BOOLEAN-Feld habe ich so zum Laufen gebracht:
( "kultverf_aktiv" = CAST(:qaktiv AS VARCHAR(10)) OR :qaktiv IS NULL )

LO habe ich mal auf 24.8.3.2 aktualisiert, dann ist das besser vergleichbar.

Zu meiner Datum-Abfrage:

"daternteende" <= :qkldaternteende
funktioniert, wenn ich ein Datum eingebe, bei NULL bleibt die Tabelle leer.

( "daternteende" <= :qkldaternteende OR CAST(:qkldaternteende AS VARCHAR(50)) IS NULL )
bei NULL ist die Tabelle gefüllt, bei Datumseingabe kommt die Fehlermeldung "Incorrect type for setValue"

( "daternteende" <= CAST(:qkldaternteende AS DATE) OR CAST(:qkldaternteende AS VARCHAR(50)) IS NULL )
bei NULL ist die Tabelle gefüllt, bei Datumseingabe kommt die Fehlermeldung "Incorrect type for setString"

( "daternteende" <= :qkldaternteende OR :qkldaternteende IS NULL )
bei NULL ist die Tabelle gefüllt, bei Datumseingabe kommt die Fehlermeldung "Incorrect type for setValue"

( "daternteende" <= CAST(:qkldaternteende AS DATE) OR :qkldaternteende IS NULL )
bei NULL ist die Tabelle gefüllt, bei Datumseingabe kommt die Fehlermeldung "Incorrect type for setString"

( "daternteende" <= CAST(:qkldaternteende AS VARCHAR(50)) OR :qkldaternteende IS NULL )
sowohl bei NULL, als auch bei Datumseingabe erfolgt eine korrekte Filterung und Anzeige der Daten. Diese Variante hatte ich zuvor tatsächlich noch nicht versucht, denn ich finde es nicht logisch, dass ich die Datumseingabe zu einem VARCHAR machen muss. Denn es funktioniert, egal ob ich 10.10.25 oder 2025-10-10 eingebe.

Jetzt funktioniert es bei mir allerdings genau umgekehrt, wie im Handbuch beschrieben. Ist das nur hier so, oder lassen sich die Ergebnisse auf einem anderen System so wiederholen?

Könnte soetwas auch an der Verbindung zur DB liegen? Ich habe den Firebird-Treiber gewählt, es gingen ja auch JDBC oder ODBC?

Viele Grüße
Heiko

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Datumsvergleich bei Parameterabfrage mit firebird

Beitrag von RobertG » Do 21. Nov 2024, 15:10

Das Merkwürdige ist doch eigentlich, dass bei Parametern die Eingabe selbst erst einmal eine reine Texteingabe ist. Ich muss mir das erst einmal genauer anschauen. Auch dazu gab es Bugmeldungen. Mir fällt so etwas nicht auf, weil ich mit Parametern überhaupt nicht arbeite.

Schau einmal hier: https://bugs.documentfoundation.org/sho ... ?id=130595

Vielleicht müssen wir da einen Folgebug zu auf machen.
Edit: Habe ich gemacht: https://bugs.documentfoundation.org/sho ... ?id=163996

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten