Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Verständnissfrage zu IIF Abfrage in SQLite mit Firedac (https://www.delphipraxis.net/210146-verstaendnissfrage-zu-iif-abfrage-sqlite-mit-firedac.html)

fisipjm 8. Mär 2022 10:33

Datenbank: SQLite • Version: 3.31.1 • Zugriff über: Firedac

Verständnissfrage zu IIF Abfrage in SQLite mit Firedac
 
Hi,

ich habe folgende Situation. Eine lokale FFDMemtable, TFDLocalSQL und TFDQuery.
Ich frage über die Query die daten der Memtable ab. Jetzt hab ich nur folgendes Problem. Ich nutze Delphi 10.4 und will in der Query die IIF Function verwenden. In folgendem Forum hab ich gelesen warum ich wohl aktuell immer nur leere Werte zurück bekomme.
https://en.delphipraxis.net/topic/36...ite-local-sql/

Soweit versteh ich das, was ich nicht verstehe ist warum ich die Query in der IDE zur Designtime auführen kann und alle Daten passen, also scheint es ja doch irgendwie zu gehen.
Habt ihr Ideen? Ich hab es jetzt umgeschrieben in ein Case kontrukt. Wird aber halt gefühlt um den faktor 10 unübersichtlicher.

jobo 9. Mär 2022 11:00

AW: Verständnissfrage zu IIF Abfrage in SQLite mit Firedac
 
Ich kenne mich mit den Interna der verschiedenen Delphi Versionen nicht aus. Bzw ist unklar, wie, welches SQLite hier (manuell ggf) eingebunden wird: in der IDE, EXE?
IIF() scheint jedenfalls innerhalb der SQLite Funktionen relativ neu zu sein. Vielleicht eine Versionsfrage. Ob das diese Auswirkungen hat ist allerdings wiederum fraglich.

Ggf. sind einfach die Besonderheiten von SQLite (Typaffinität) und den "Ausdrucksmöglichkeiten" von IIF() so speziell, dass sie im DBClient nicht perfekt umgesetzt sind. IIF / CASE WHEN kann theoretisch je nach Datenlage unterschiedliche Ergebnistypen produzieren. SQLite selbst ist das dank Typaffinität wahrscheinlich relativ egal, dem DBClient vielleicht weniger. Die Sachlage kann dabei unterschiedlich kompliziert sein, je nach Datentypvermischung, impliziter Konvertierbarkeit und vielleicht auch der Existenz von NULL Werten.

In neuen SQLite Versionen (der letzten Stand Ende Februar 2022) gibt es den Strict Mode, der grundlegend das Verhalten von SQLite und Spaltentypen ändert Richtung "normaler" DB. Klappt vielleicht besser, hat aber vielleicht auch unerwartete Effekte auf den Bestandscode, jenachdem wie sauber der entwickelt wurde.

Wenn es mit CASE WHEN geht, würde ich es erstmal so lassen und vielleicht mal bei den Client Entwicklern fragen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:00 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