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;