![]() |
Client Data Set suchen nach Stichwörter/Einzelnen Buchstaben
Hi, ich stehe jetzt gerade vor dem Problem: Wie kann man ein Suchfeld so programmieren das ich passende Inhalte so angezeigt bekomme ohne das ich den kompletten Namen dieses Felds eingeben muss? Weil im Moment suche ich noch so im Client Data Set mit
Delphi-Quellcode:
und da muss ich ja wirklich den Inhalt eines Feldes wirklich so in mein Edit Feld schreiben damit ich dort hin navigiert werde. Ich denke so an die Methode wie es die Forensuche auch macht das wenn keine Übereinstimmungen gefunden wurden so ähnliche Artikel angezeigt werden.
CDS.Locate(...);
Danke Luki :) |
AW: Client Data Set suchen nach Stichwörter/Einzelnen Buchstaben
Versuch mal Such%
|
AW: Client Data Set suchen nach Stichwörter/Einzelnen Buchstaben
Hä? Wie jetzt? :D
|
AW: Client Data Set suchen nach Stichwörter/Einzelnen Buchstaben
Schau Dir die Parameter von Locate doch einmal genau an, besonders den letzten.
|
AW: Client Data Set suchen nach Stichwörter/Einzelnen Buchstaben
Ja ok danke, nur wie kann ich das ganze in eine Liste packen und nicht das es im DBGrid angezeigt wird? Also alle übereinstimmende Treffer?
|
AW: Client Data Set suchen nach Stichwörter/Einzelnen Buchstaben
Zitat:
Für gefilterte Datenmengen setzt du entweder den Filter des Datasets ein – genau! die Namensähnlichkeit mit dem, was du suchst, ist nicht zufällig – oder du filterst bereits im Dataset via SQL-Statement, indem du die Where-Klausel entsprechend setzt. Und jetzt frag bitte nicht gleich wieder, wie das geht, sondern schau dir zuerst einmal die entsprechenden Punkte in der Online-Hilfe an, dort steht das nämlich genau drin. Falls deine nur auf Englisch ist und du Englisch nicht gut kannst, benutze die hiesige Delphi-Referenz. |
AW: Client Data Set suchen nach Stichwörter/Einzelnen Buchstaben
Willst du suchen oder filtern?
Suchen das Dataset wird von Vorne nach Hinten (oder umgekehrte Suchrichtung) durchsucht und bei jedem Treffer bleibt der Datensatzcursor im betreffenden Datensatz stehen. Danach muss der Benutzer die Suche neu anstoßen wenn er weitere Treffer sehen möchte. Sollte die Suche keinen (weiteren) Treffer ergeben muss der Benutzer durch eine Meldung oder sonstigen Hinweis darauf hingewiesen werden. Die
Delphi-Quellcode:
-Methode ist auch eine Suchfunktion; sie hat aber den Mangel dass man nicht von der aktuellen Position weitersuchen kann. Ausserdem kann man mit Locate nicht in allen Feldern suchen ("Volltextsuche").
Locate
Filtern Es werden nur Datensätze angezeigt die dem Suchmuster entsprechen. Dazu wird das Event
Delphi-Quellcode:
verwendet.
OnFilterRecord
|
AW: Client Data Set suchen nach Stichwörter/Einzelnen Buchstaben
Zitat:
![]() Wird jedes Mal ausgelöst, wenn ein anderer Datensatz in der Datenmenge aktiviert und ein Filter verwendet wird. ![]() Gibt den Text des aktuellen Filters einer Datenmenge an. ![]() Gibt an, ob für die Datenmenge ein Filter aktiv ist. |
AW: Client Data Set suchen nach Stichwörter/Einzelnen Buchstaben
Wenn eine DataSet gefiltert werden soll, dann muss
![]()
Delphi-Quellcode:
und entweder man schreibt etwas in
True
![]() ![]() Wenn der Datensatz die Kriterien erfüllt, dann setzt man einfach
Delphi-Quellcode:
auf
Accept
Delphi-Quellcode:
und der Datensatz wird in der gefilterten Menge mit angezeigt. Ansonsten einfach auf
true
Delphi-Quellcode:
und der Datensatz gehört nicht mehr zur gefilterten Menge.
False
|
AW: Client Data Set suchen nach Stichwörter/Einzelnen Buchstaben
Zitat:
Die eingebauten Fähigkeiten des Datasets sind dafür aber nicht ausreichend weshalb auf jeden Fall Sourcecode nötig wird um eine gute und allgemeingültige Lösung zu finden. Dazu das Kochrezept:
Delphi-Quellcode:
Accept := False;
for i := 0 to Dataset.Fields.Count-1 do begin f := Dataset.Fields[i]; if not f.IsNull and f.Visible then begin // Ggf. müssen bestimmte Feldtypen ausgeschlossen werden (Felder mit binärem Inhalt, TBlobField) s := f.Text; // die WildCompare Funktion liefert True wenn ein String auf das Suchmuster, das ? und * enthalten darf, passt // passende Funktionen findet man hier in der DP // Wer mag kann dafür auch reguläre Ausdrücke einsetzen (könnte aber den Benutzer damit überfordern) if WildCompare(s, suchpattern) then begin Accept := True; break; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:07 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