![]() |
Datenbank: dBase • Version: f. Windows • Zugriff über: BDE
D7 Table filter mit Substring
Hi zusammen,
ich such seit Stunden im Internet, aber alle Angebote bringen nur Fehlermeldungen. Ich möchte ganz einfach z.B. in einem DBGrid nach Substring *test* filtern. Mit Filter z.B: Table1.Filter:='DFName=''PC*'''; funktionierte, aber warum nicht mit Table1.Filter:='DFName=''*PC*''' ?? Ich möchte ganz einfach nach Substring filtern können. Kann mir bitte jemand helfen? Vielen Dank für jede Tip... Gruß beanbear |
AW: D7 Table filter mit Substring
Zwar kenne ich Dbase nur vom Hörensagen, weiß aber dennoch, daß Datenbanken nicht den Asterix * als Platzhalter verwenden, sondernd das Prozentzeichen % als Platzhalter dient. Zudem wird eine Suche mit Platzhalter nicht über das Gleichheitszeichen = eingeleitet, sondern über das Schlüsselwort like.
All das könntest du selbst herausfinden, wenn du dich mit den Grundlagen von SQL ein wenig näher befassen wolltest. |
AW: D7 Table filter mit Substring
[OT] Asterisk <> Asterix ;) [/OT]
|
AW: D7 Table filter mit Substring
In dBASE selbst nutzt man (wenn ich mich nur halbwegs recht erinnere) den * als [OT] Asterisk <> Asterix [/OT];-) -> Platzhalter für eine beliebige Anzahl von Zeichen und das ? für ein einzelnes Zeichen. Zumindest steht das im Der Data Becker Führer - dBASE IV (von 1989) so.
Aber das funktioniert (meines Wissens) nicht in Filtern. Da klappt (meist) nur die nach rechts offenen Suche. Zur BDE gehört die Localsql.hlp, da steht alles drin, was an SQL über die BDE möglich ist (für dBASE und Paradox) und laut dieser Hilfedatei wird % als Platzhalter genutzt. Auch wenn dBASE die erste relationale Datenbank für PCs war, die mit SQL arbeitete, so war das (zumindest anfangs) doch nur ein Subset von SQL. Da ist es sinnvoller, sich mit der Doku zu dBASE auseinander zu setzen, als sich den "SQL-Standard" reinzuziehen, es mag Übereinstimmungen geben, aber die sind nicht zwingend. |
AW: D7 Table filter mit Substring
Zitat:
|
AW: D7 Table filter mit Substring
Zitat:
Zitat:
Mein Tip ist, dass es entweder nicht geht oder kein Treffer gefunden wird (wenn bspw. * = beliebige Zeichen <> kein Zeichen). |
AW: D7 Table filter mit Substring
Manche Datenzugriffskomponenten haben neben den Attributen Filter und Filtered auch noch das Attribut FilterOptions.
Hier kann gewählt werden:
Das Verhalten scheint insgesamt aber auch abhängig von der Implementierung der Komponente zu sein. Die Filter funktionieren ja auch bei solchen Komponenten, die zwar wie Datenbankzugriffskomponenten arbeiten, aber bei denen keine Datenbank im Hintergrund liegt (z. B.: tkbmMemTable). Ebenso scheinen die Filter nicht unbedingt ein entsprechendes SQL zu generieren, die Syntax bei den Filtern mag ähnlich der von SQL sein, ist aber nicht zwingend in vollem Umfang mit den Möglichkeiten von SQL identisch. |
AW: D7 Table filter mit Substring
Zitat:
foNoPartialCompare =False wäre demnach PartialCompare, das Wildcardzeichen '*' wird als Platzhalter interpretiert. |
AW: D7 Table filter mit Substring
Zitat:
Das man den * an beliebiger Stelle als Wildcard nutzen kann, ist mir bei Filtern bisher noch nicht aufgefallen bzw. hat noch nicht zum gewünschten/erwarteten Ergebnis geführt. Aber das mag auch abhängig von der genutzten Komponente bzw. der darunterliegenden Datenbank sein. |
AW: D7 Table filter mit Substring
Zitat:
Delphi-Quellcode:
Table1.Filter:='"test" & DFName';
|
AW: D7 Table filter mit Substring
Hi,
also ich mach das wie folgt:
Delphi-Quellcode:
... und dann im OnFilterRecord Event
procedure TForm1.Edit2Change(Sender: TObject);
begin IF TRIM(Edit2.Text) <> '' THEN BEGIN Table1.Filtered := True; END ELSE BEGIN Table1.Filtered := False; END; end;
Delphi-Quellcode:
Geht einwandfrei ohne Joker (*)
procedure TForm1.Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
type TFilterOption = (foCaseInsensitive, foNoPartialCompare); TFilterOptions = set of TFilterOption; begin if edit2.Text <> '' then begin Accept:= Pos(UpperCase(Edit2.Text),UpperCase(Table1.FieldByName('Text').AsString)) > 0; end; end; Gruß Sigi |
AW: D7 Table filter mit Substring
Delphi-Quellcode:
Wirst du pro Codezeile bezahlt?
procedure TForm1.Edit2Change(Sender: TObject);
begin IF TRIM(Edit2.Text) <> '' THEN BEGIN Table1.Filtered := True; END ELSE BEGIN Table1.Filtered := False; END; end; |
AW: D7 Table filter mit Substring
Könnte man zu
Delphi-Quellcode:
verkürzen.
Table1.Filtered := TRIM(Edit2.Text) <> '';
|
AW: D7 Table filter mit Substring
und einem schnöden > statt einem <>.
|
AW: D7 Table filter mit Substring
Hi,
ist euch langweilig, dass ihr euch mit solch einem Paddelkram beschäftigen müsst ? :-D Wenn ich mir das so anschaue, stammt das noch aus der 100% Copy&Paste Zeit :-D, weil alles in Großschrift.... mach ich sonst nicht. Aber unser Einer ist ja auch mal ganz froh, wenn er aus seinem zugegebenermaßen kleinen Wissenschatz auch mal etwas beitragen kann. Aber ja, Ihr hab ja recht, kann man alles schlanker machen:-) ... und noch ein Lob an das Forum hier, ohne die Dephipraxis hätt ich das Proggen schon lang an den Nagel gehängt. cu Sigi |
AW: D7 Table filter mit Substring
hallo,
ich hab mich mal mit dbase vor 25 Jahren beschäftigt und am Ende bin ich zu dem Ergebniss gekommen, das ist gar keine relationale Datenbank. mfg |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz