![]() |
FireDac & SQLite: Lower() und Upper() nicht mehr unterstützt?
Bei der Migration eines VCL Projektes von D11 auf D12 bekomme ich einen Laufzeitfehler beim Start:
Zitat:
Der Zugriff auf die SQLIte DB ist nicht encrypted. Warum gehen diese Standardfunktionen unter D12 nicht mehr? |
AW: FireDac & SQLite: Lower() und Upper() nicht mehr unterstützt?
Offiziell heißen die Funktionen LCASE und UCASE. Einen Unterschied zwischen D11 und D12 konnte ich erstmal nicht erkennen.
Kannst du ein kleines Beispiel zeigen, bei dem es unter D11 funktioniert, aber in D12 nicht? |
AW: FireDac & SQLite: Lower() und Upper() nicht mehr unterstützt?
Zur Verschlüsselung: m.W. hat da SQLite jetzt etwas kostenpflichtig gemacht. Da war glaube ich was.
|
AW: FireDac & SQLite: Lower() und Upper() nicht mehr unterstützt?
Im OWER/UPPER im Dataset.Filter (Local SQL) oder im FilterSQL (WHERE) ?
Ersteres hat nichts mit der Datenbank zu tun. und die Verschlüsselung: ![]() ![]() |
AW: FireDac & SQLite: Lower() und Upper() nicht mehr unterstützt?
Dieser Code läuft mit D11, aber nicht mit D12:
Code:
Encryption ist in FDConnection deaktiviert (enNo).
FDTable1.Filter := 'lower (Name) like ' + Quotedstr(lowercase(Filter.Text) + '%');
FDTable1.Filtered := true; Syntax in SQLite: ![]() ? |
AW: FireDac & SQLite: Lower() und Upper() nicht mehr unterstützt?
Wie gesagt, das hat normalerweise nichts mit SQLite zu tun.
Es wird im Programm (vom Delphi) ausgewertet, nicht von der Datenbank und hat somit auch nichts mit deren Syntax zu tun. (bzw. ist immer meistens gleich, egal welche Datenbank verwendet wird) Siehst du schon daran, dass die Grundfunktionalität bereits im TDataSet verbaut ist und z.B. auch beim TClientDataSet ohne eine Datenbank benutzt werden kann. Zitat:
![]() z.B. beim pgDAC gibt es neben .Filter (lokaler Dataset.Filter) auch noch ein .FilterSQL (erweitert das WHERE vom SELECT). Beim FireDAC scheint .Filter überschrieben zu sein und ... k.A. was es intern nutzt, aber ich würde eher auf LocalSQL tippen, anstatt auf was von der Datenbank. ![]() PS: Anstatt oder zusätzlich zum .Filter kann man auch "manuell" über .OnFilterRecord filtern. ![]() OK, für ein einfaches Lower-/UpperCase vielleicht nicht unbedingt nötig. |
AW: FireDac & SQLite: Lower() und Upper() nicht mehr unterstützt?
Danke Himitsu, aber ich kann dir nicht folgen.
Ich bin ja auch der Meinung, dass es mit Delphi und nicht SQLite zu tun hat. pgDAC kenne ich nicht und .FilterSQL finde ich nicht. Es ist doch nur ein simpler Filterausdruck, der bis D11 einwandfrei funktioniert hat. Ich verwende ihn unter FilterChangeTracking. |
AW: FireDac & SQLite: Lower() und Upper() nicht mehr unterstützt?
Es kann sein, dass Embarcadero die Syntax bei sich verändert hat. (im DataSet, bzw. im FireDAC)
Wie gesagt, normal hat das nichts mit SQLite oder sonsteinem verbundenem DBMS zu tun -> ganz eigene Syntax Das, was TDataSet.Filter normalerweise kann, siehe TExprParser.GetFuncResultInfo bzw. TExprParser.TokenSymbolIsFunc in Data.DBCommon.pas und eigentlich ist LOWER dort immernoch enthalten. :gruebel: Aber wie gesagt/vermutet, ist .Filter im FireDAC-Query überschrieben und wird stattdessen eventuell LocalSQL nuzten. (das WHERE im SELECT erweitern wohl nicht, denn dann dürfte der Fehler anders klingen, wenn er aus dem DBMS käme) Wie sieht dein Filter aus? |
AW: FireDac & SQLite: Lower() und Upper() nicht mehr unterstützt?
Kann es sein, dass es nicht das lower ist sondern das lowercase?
|
AW: FireDac & SQLite: Lower() und Upper() nicht mehr unterstützt?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Code:
Hat exakt so ja auch unter D11 noch funktioniert.
FDTable1.Filter := 'lower (Name) like ' + Quotedstr(lowercase(Filter.Text) + '%');
Im Anhang eine SQL Abfrage mit demselben Inhalt aus "DB Browser für SQLite", die direkt auf der Datenbank läuft. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 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-2025 by Thomas Breitkreuz