Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi D7 Table filter mit Substring (https://www.delphipraxis.net/186518-d7-table-filter-mit-substring.html)

beanbear6 9. Sep 2015 01:38

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

Perlsau 9. Sep 2015 02:29

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.

DeddyH 9. Sep 2015 08:35

AW: D7 Table filter mit Substring
 
[OT] Asterisk <> Asterix ;) [/OT]

nahpets 9. Sep 2015 09:00

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.

Dejan Vu 9. Sep 2015 09:48

AW: D7 Table filter mit Substring
 
Zitat:

Zitat von DeddyH (Beitrag 1315235)
[OT] Asterisk <> Asterix ;) [/OT]

Obelisk <> Obelix.

jobo 9. Sep 2015 10:15

AW: D7 Table filter mit Substring
 
Zitat:

Zitat von beanbear6 (Beitrag 1315207)
..Mit Filter z.B: Table1.Filter:='DFName=''PC*'''; funktionierte, aber warum nicht mit Table1.Filter:='DFName=''*PC*''' ??

Das korrespondiert mit dem Hilfetext von TDataset.Filteroptions:
Zitat:

Wenn ein String in einem Filter mit einem Sternchen endet (*), lassen sich auch Teil-Strings suchen.
Im BDEDataset steht es allerdings so wieder nicht.
Mein Tip ist, dass es entweder nicht geht oder kein Treffer gefunden wird (wenn bspw. * = beliebige Zeichen <> kein Zeichen).

nahpets 9. Sep 2015 10:29

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:
foCaseInsensitiv True / False
foNoPartialCompare True / False
Damit die rechtsoffene Suche funktioniert muss der zweite Wert auf True stehen, ein Platzhalter ist dann nicht erforderlich.

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.

jobo 9. Sep 2015 16:23

AW: D7 Table filter mit Substring
 
Zitat:

Zitat von nahpets (Beitrag 1315268)
foCaseInsensitiv True / False
foNoPartialCompare True / False
Damit die rechtsoffene Suche funktioniert muss der zweite Wert auf True stehen, ein Platzhalter ist dann nicht erforderlich.

Laut Hilfe ermöglicht dieser Switch das Suchen nach dem Wildcardzeichen selbst. Sprich der Filter wird 1 zu 1 angewendet.
foNoPartialCompare =False wäre demnach PartialCompare, das Wildcardzeichen '*' wird als Platzhalter interpretiert.

nahpets 9. Sep 2015 16:56

AW: D7 Table filter mit Substring
 
Zitat:

Zitat von jobo (Beitrag 1315322)
Zitat:

Zitat von nahpets (Beitrag 1315268)
foCaseInsensitiv True / False
foNoPartialCompare True / False
Damit die rechtsoffene Suche funktioniert muss der zweite Wert auf True stehen, ein Platzhalter ist dann nicht erforderlich.

Laut Hilfe ermöglicht dieser Switch das Suchen nach dem Wildcardzeichen selbst. Sprich der Filter wird 1 zu 1 angewendet.
foNoPartialCompare =False wäre demnach PartialCompare, das Wildcardzeichen '*' wird als Platzhalter interpretiert.

Da bin ich mir aber nicht so ganz sicher, meine praktische Erfahrung ist, dass bei foNoPartialCompare = false, also letztlich PartialCompare eine rechtsoffene Suche stattfindet, quasi ein impliziter * rechts angefügt, die Angabe des * ist dabei nicht erforderlich. Bei foNoPartialCompare = True wird der * nicht geduldet, bzw. wird als Teil des Suchbegriffes angenommen.
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.

joachimd 9. Sep 2015 17:13

AW: D7 Table filter mit Substring
 
Zitat:

Zitat von beanbear6 (Beitrag 1315207)
Ich möchte ganz einfach z.B. in einem DBGrid nach Substring *test* filtern.

in DBase bzw Xbase gibt es den $-Operator:
Delphi-Quellcode:
Table1.Filter:='"test" & DFName';


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

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