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
🙏 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!🍀
>> 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
Re: Datumsvergleich bei Parameterabfrage mit firebird
Ich habe das gerade einmal mit einer internen DB getestet:
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?
Habe ich so aus dem Kapitel zu Parameterabfragen aus dem aktuellen Handbuch.
Code: Alles auswählen
SELECT * FROM "tbl_Test" WHERE "Datum" <= :qDat
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
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
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
Re: Datumsvergleich bei Parameterabfrage mit firebird
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
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
Re: Datumsvergleich bei Parameterabfrage mit firebird
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
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
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.