AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein FireDac & SQLite: Lower() und Upper() nicht mehr unterstützt?
Thema durchsuchen
Ansicht
Themen-Optionen

FireDac & SQLite: Lower() und Upper() nicht mehr unterstützt?

Ein Thema von Stewag · begonnen am 12. Feb 2024 · letzter Beitrag vom 14. Feb 2024
Antwort Antwort
Seite 1 von 3  1 23      
Stewag

Registriert seit: 12. Jun 2008
175 Beiträge
 
Delphi 12 Athens
 
#1

FireDac & SQLite: Lower() und Upper() nicht mehr unterstützt?

  Alt 12. Feb 2024, 17:41
Bei der Migration eines VCL Projektes von D11 auf D12 bekomme ich einen Laufzeitfehler beim Start:

Zitat:
EFDException mit der Meldung '[FireDAC][Phys]-327. Escape-Funktion [LOWER] wird nicht unterstützt'
Den Befehl benötige ich bei der Filterung einer FireDac Tabelle. Wenn ich die Filterbedingung heraus kommentiere, kommt kein Fehler.

Der Zugriff auf die SQLIte DB ist nicht encrypted.

Warum gehen diese Standardfunktionen unter D12 nicht mehr?
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#2

AW: FireDac & SQLite: Lower() und Upper() nicht mehr unterstützt?

  Alt 12. Feb 2024, 22:33
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?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#3

AW: FireDac & SQLite: Lower() und Upper() nicht mehr unterstützt?

  Alt 13. Feb 2024, 08:12
Zur Verschlüsselung: m.W. hat da SQLite jetzt etwas kostenpflichtig gemacht. Da war glaube ich was.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#4

AW: FireDac & SQLite: Lower() und Upper() nicht mehr unterstützt?

  Alt 13. Feb 2024, 10:02
Im OWER/UPPER im Dataset.Filter (Local SQL) oder im FilterSQL (WHERE) ?
Ersteres hat nichts mit der Datenbank zu tun.

und die Verschlüsselung:
https://www.delphipraxis.net/214094-...d-feature.html
https://www.delphipraxis.net/214322-...hluesseln.html
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Stewag

Registriert seit: 12. Jun 2008
175 Beiträge
 
Delphi 12 Athens
 
#5

AW: FireDac & SQLite: Lower() und Upper() nicht mehr unterstützt?

  Alt 13. Feb 2024, 10:13
Dieser Code läuft mit D11, aber nicht mit D12:

Code:
FDTable1.Filter := 'lower (Name) like ' + Quotedstr(lowercase(Filter.Text) + '%');
FDTable1.Filtered := true;
Encryption ist in FDConnection deaktiviert (enNo).

Syntax in SQLite: https://www.sqlitetutorial.net/sqlit.../sqlite-lower/
?
Steffen

Geändert von Stewag (13. Feb 2024 um 10:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#6

AW: FireDac & SQLite: Lower() und Upper() nicht mehr unterstützt?

  Alt 13. Feb 2024, 11:46
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:
In einem Filter können natürlich auch komplexe Ausdrücke angegeben werden
OK, das ist mir neu.
https://docwiki.embarcadero.com/Libr...DataSet.Filter


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.
http://docwiki.embarcadero.com/RADSt..._SQL_(FireDAC)



PS: Anstatt oder zusätzlich zum .Filter kann man auch "manuell" über .OnFilterRecord filtern.
https://docwiki.embarcadero.com/Libr...OnFilterRecord
OK, für ein einfaches Lower-/UpperCase vielleicht nicht unbedingt nötig.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (13. Feb 2024 um 11:50 Uhr)
  Mit Zitat antworten Zitat
Stewag

Registriert seit: 12. Jun 2008
175 Beiträge
 
Delphi 12 Athens
 
#7

AW: FireDac & SQLite: Lower() und Upper() nicht mehr unterstützt?

  Alt 13. Feb 2024, 12:18
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.
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#8

AW: FireDac & SQLite: Lower() und Upper() nicht mehr unterstützt?

  Alt 13. Feb 2024, 13:35
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.
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?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (13. Feb 2024 um 13:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#9

AW: FireDac & SQLite: Lower() und Upper() nicht mehr unterstützt?

  Alt 13. Feb 2024, 14:16
Kann es sein, dass es nicht das lower ist sondern das lowercase?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Stewag

Registriert seit: 12. Jun 2008
175 Beiträge
 
Delphi 12 Athens
 
#10

AW: FireDac & SQLite: Lower() und Upper() nicht mehr unterstützt?

  Alt 13. Feb 2024, 14:38
Zitat:
Kann es sein, dass es nicht das lower ist sondern das lowercase?
Nein. Lowercase() ist die Delphi Funktion, deren Rückgabe an die Filterbedingung unter Berücksichtigung des TEdit Filter.Text übergeben wird, lower() ist die SQL Syntax, die von SQLite verarbeitet wird:

Code:
FDTable1.Filter := 'lower (Name) like ' + Quotedstr(lowercase(Filter.Text) + '%');
Hat exakt so ja auch unter D11 noch funktioniert.

Im Anhang eine SQL Abfrage mit demselben Inhalt aus "DB Browser für SQLite", die direkt auf der Datenbank läuft.
Miniaturansicht angehängter Grafiken
zwischenablage02.jpg  
Steffen

Geändert von Stewag (13. Feb 2024 um 15:01 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 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