Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   TClientDataSet: foCaseInsensitive funzt nicht so richtig mit Umlauten (https://www.delphipraxis.net/211944-tclientdataset-focaseinsensitive-funzt-nicht-so-richtig-mit-umlauten.html)

Papaschlumpf73 24. Nov 2022 17:42

Datenbank: TClientDataSet • Version: 1 • Zugriff über: TClientDataSet

TClientDataSet: foCaseInsensitive funzt nicht so richtig mit Umlauten
 
Guten Abend,

wenn ich ein TClientDataSet mit foCaseInsensitive filtere funzt das meistens. Jetzt habe ich ein Beispiel, da klappt es nicht mehr und ich bin etwas ratlos. Kann das jemand nachvollziehen?

Bei der aktuellen Auswahl geben beide Filter dasselbe Ergebnis zurück. Wenn man die auskommentierte Variante mit Umlauten verwendet, funktionieren nur noch der 1. Filter mit identischer Groß-/Kleinschreibung.

Delphi-Quellcode:
procedure TFMain.Button2Click(Sender: TObject);
var ClientDataSet1: TClientDataSet;
    Feld1: TWideStringField;
    R1,R2,R3,R4: Integer;
begin
{ClientDataSet + Field erzeugen}
ClientDataSet1:=TClientDataSet.Create(self);
Feld1:=TWideStringField.Create(ClientDataSet1);
Feld1.Name:='Field1';
Feld1.FieldName:='Name1';
Feld1.DataSet:=ClientdataSet1;
{2 Datenzeilen anfügen}
ClientDataSet1.CreateDataSet;
ClientDataSet1.Append;
ClientDataSet1.FieldByName('Name1').Text:='Marc Öberer';
ClientDataSet1.Post;
ClientDataSet1.Append;
ClientDataSet1.FieldByName('Name1').Text:='Marc Oeberer';
ClientDataSet1.Post;
{Filter1 mit gleicher Groß-/Kleinschreibung}
ClientDataSet1.FilterOptions:=[foCaseInsensitive];
//ClientDataSet1.Filter:='Name1 LIKE ''%Marc Öb%''';
ClientDataSet1.Filter:='Name1 LIKE ''%Marc Oeb%''';
ClientDataSet1.Filtered:=true;
R1:=ClientDataSet1.RecordCount;
{Filter2 mit Kleinschreibung}
ClientDataSet1.Filtered:=false;
//ClientDataSet1.Filter:='Name1 LIKE ''%marc öb%''';
ClientDataSet1.Filter:='Name1 LIKE ''%marc oeb%''';
ClientDataSet1.Filtered:=true;
R2:=ClientDataSet1.RecordCount;
{Ergebnis}
Showmessage('Filter1: '+R1.ToString+#13#10+'Filter2: '+R2.ToString);
end;

Olli73 27. Nov 2022 09:31

AW: TClientDataSet: foCaseInsensitive funzt nicht so richtig mit Umlauten
 
Ich schätze Mal da wird intern ein LowerCase anstatt AnsiLowerCase verwendet, was dann bei Umlauten etc. nicht funktioniert.

Probiers Mal so:

Delphi-Quellcode:
ClientDataSet1.FilterOptions:=[]
ClientDataSet1.Filter:='Lower(Name1) LIKE ''%marc öb%''';

TigerLilly 27. Nov 2022 11:25

AW: TClientDataSet: foCaseInsensitive funzt nicht so richtig mit Umlauten
 
Das hat uU nicht nur mit dem CDS zu tun. Wo kommen die Daten denn her + wie sind die dort kodiert?

Papaschlumpf73 27. Nov 2022 11:38

AW: TClientDataSet: foCaseInsensitive funzt nicht so richtig mit Umlauten
 
Zitat:

Zitat von TigerLilly (Beitrag 1515453)
Das hat uU nicht nur mit dem CDS zu tun. Wo kommen die Daten denn her + wie sind die dort kodiert?

Steht alles oben in der Procedur

Papaschlumpf73 27. Nov 2022 12:54

AW: TClientDataSet: foCaseInsensitive funzt nicht so richtig mit Umlauten
 
Zitat:

Zitat von Olli73 (Beitrag 1515452)
Ich schätze Mal da wird intern ein LowerCase anstatt AnsiLowerCase verwendet, was dann bei Umlauten etc. nicht funktioniert.

Probiers Mal so:

Delphi-Quellcode:
ClientDataSet1.FilterOptions:=[]
ClientDataSet1.Filter:='Lower(Name1) LIKE ''%marc öb%''';

Danke, das funktioniert. Ich mache mal ein Ticket bei Emba auf.


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