Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ClientDataSet mit zwei Filtern (https://www.delphipraxis.net/193092-clientdataset-mit-zwei-filtern.html)

himitsu 20. Jun 2017 12:27

AW: ClientDataSet mit zwei Filtern
 
Was erwartest du denn bei
Delphi-Quellcode:
Memo1.Text := 'WHERE feld = ' + QuotedStr('Das ist ein Text mit '' und \ drin');
?

Code:
Input: WHERE feld = Das ist ein Text mit " , ' und \ drin

Pascal (QuotedStr: WHERE feld = 'Das ist ein Text mit " , '' und \ drin'

SQL (EscapeValue): WHERE feld = 'Das ist ein Text mit " , \' und \\ drin'

SQL (EscapeName): WHERE feld = "Das ist ein Text mit \" , ' und \\ drin"
Bestimmt was Anderes als ich.

FilterText erwartet einen Text nach der Definition für SQL-Strings.
QuotedStr erzeugt aber einen Text nach der Definition für Pascal-Strings.
Und die sind nicht kompatibel, wenn es um Steuerzeichen geht.

H.Bothur 20. Jun 2017 12:53

AW: ClientDataSet mit zwei Filtern
 
OK - Danke !

Das wusste ich natürlich nicht.

Hans

haentschman 20. Jun 2017 14:58

AW: ClientDataSet mit zwei Filtern
 
@himitsu:
Zitat:

FilterText erwartet einen Text nach der Definition für SQL-Strings.
...wo hast du das her? Die Doku incl. dem Beispiel sagt was anderes. :gruebel:
http://docwiki.embarcadero.com/Libra...DataSet.Filter
Delphi-Quellcode:
with ADODataSet1 do begin
Filtered := False;
Filter := 'State = ' + QuotedStr('CA') + ' OR ' +
'State = ' + QuotedStr('CA');
Filtered := True;
end;

himitsu 21. Jun 2017 09:39

AW: ClientDataSet mit zwei Filtern
 
Nur weil in der Doku etwas Falsches drin steht, heißt es noch lange nicht, dass es richtig ist. :angle2:

Wie gesagt, QuotedStr hat ein anderes Verhalten beim Quoting/Escaping, welches nicht zu einem SQL-Statement passt.

Leider bringt Delphi nativ keine passenden SQL-Funktionen dafür mit, was auch ein bisschen verständlich ist, da es je nach DBMS/Dialekt leichte Unterschiede gibt. (wenn man damit sein SELECT zusammenbauen wöllte)
Aber bezüglich DataSet.Filter weiß ich jetzt nicht, ob das wirklich vom DBMS abhängt ... scheint ja meinstens nur eine Implementation im Delphi zu sein, welches eine minimale Untermenge der im SQL92 enthaltenen Möglichkeiten für ein WHERE-Statement darstellt, welches man quasi mit AND an das WHERE anghängen würde.

So lange keine Steuerzeichen oder irgendwas exotisches verwendet wird, also praktisch nur ASCII ohne ' / " und C0, dann gibt es keine Probleme.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:02 Uhr.
Seite 2 von 2     12   

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