Entwickler-Ecke

Datenbanken - Wie muß man bei "OnFilterRecord" mit Platzhaltern arbeiten?


der Berliner - Mo 30.01.06 17:27
Titel: Wie muß man bei "OnFilterRecord" mit Platzhaltern arbeiten?
Hallo zusammen...
Ich möchte z.B. in einer DB nach Datensätzen Filtern in denen im Namen die Buchstaben "an" vorkommen.

Folgende Routine :

Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TFormMain.TableSpielerFilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
begin
Accept:=Dataset['Spielername']='*an*';
end;


Table1.Filtered ist auf True gesetzt.

Jetzt wird mir aber in einem DBGrid gar kein Datenstz angezeigt.
Wenn ich den Namen auschreibe ... "Andre" dann zeigt er mir diesen Datensatz an.
Kann man bei OnFilterRecord überhaupt mit Platzhaltern arbeiten ?
Oder hab ich nen Fehler in der Schreibweise?

Vielen Dank im Vorraus
Der berliner


afk - Mo 30.01.06 20:19

Ich würde es mal so versuchen:


Delphi-Quelltext
1:
2:
3:
4:
procedure TFormMain.TableSpielerFilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
  Accept:=(Pos('an', Dataset['Spielername']) > 0);
end;


Gruß Axel

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt


der Berliner - Mo 30.01.06 20:41

[quote="user profile iconafk"]Ich würde es mal so versuchen:


Delphi-Quelltext
1:
2:
3:
4:
procedure TFormMain.TableSpielerFilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
  Accept:=(Pos('an', Dataset['Spielername']) > 0);
end;


Danke für den Versuch...
So zeigt das DBGrid nix an
so Ähnlich hatte ichs schon..

Es sollten ja jetzt die Namen ANdre oder AlexANder gefunden werden..
Dann heisst es jetzt wohl weiter suchen und Probieren

Gruß Andre


afk - Di 31.01.06 01:56

Das ist seltsam, zumindest der Alexander sollte so zu finden sein, da der Pos dabei eine 6 zurückliefern müßte. Für den Andre muß das Ganze noch durch "Pos('an', LowerCase(Dataset['Spielername']))" Case-insensitive gemacht werden.

Kann es sein, das in der Eigenschaft "Filter" von dem TDataset auch noch ein Filterkriterium steht und deswegen eine leere Datenmenge geliefert wird ?

Gruß Axel


der Berliner - Di 31.01.06 16:48

Danke Für die Hilfe Leute.

Habe das Prob jetzt folgendermaßen gelöst (mit Hilfe :wink: )

Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TFormMain.TableSpielerFilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
begin
Accept:=(Pos(AnsiUpperCase('An'), AnsiUpperCase(Dataset.FieldByName('Spielername').AsString))>0);
end;


So funzt es.

gruß Andre