![]() |
Datenbank: SQLite • Version: 3 • Zugriff über: FireDAC
"Live Preview" zum Suchen mittels Texteingabe
Ich bin mir nie sicher, ob ich bei meinen ständigen "Wie sollte man diesen Datenbank-Kram eigentlich umsetzen?"-Fragen eigentlich das richtige Unterforum erwische. Das hier ist doch eigentlich eher für konkrete Probleme mit einem ganz bestimmten DBMS, oder? Wäre nett wenn sich ein Moderator mal dazu äußern könnte.
Ich möchte einen relativ simplen VCL-Win32-Client basteln welcher den Benutzer nur mit ein paar Nummern oder einem Freitext-Feld nach ein paar Datensätzen suchen lässt. Die Ergebnismenge wird einfach in ein
Delphi-Quellcode:
geworfen.
TDBGrid
Ich bin ratlos, wie man so eine Komfortfunktion wie eine "Live Suche" implementieren sollte: Der Benutzer fängt an, Text in ein Edit zu tippen und das Frontend liefert bereits die ersten X Treffer die auf das bereits getippte passen. So wie Web-Suchmaschinen das auch tun. Es ist noch nicht sicher, ob es über eine lokale DB (wie SQLite) oder einen dedizierten MS-SQL-Server laufen wird. Deshalb kann ich ja schlecht nach jeder Änderung im Edit-Feld neu suchen und auf das Ergebnis warten. Gibt es eine Art ... Achtung, abgedroschenes Modewort ... Best Practice wie man das im RAD Studio am besten anstellt? Oder kann man das nicht per se sagen da es zu sehr auf das konkrete DBMS und die angebotenen Funktionalitäten dahinter ankommt? |
AW: "Live Preview" zum Suchen mittels Texteingabe
Das ist eine Frage wie Du es darstellst:
Zitat:
In der Praxis könnte man das so lösen: in den onChange deines Tedit schreibst Du
Delphi-Quellcode:
Ist aber stark von den Daten abhängig, so ab 100 Datensätzen die in Frage kämen kann es holprig werden, kommt aber sehr auf Deine Infrastruktur an.
If length(suchwort)>3 then Abfrage(select Name from Nametable where name like ''+suchwort+'%'');
Gruß K-H |
AW: "Live Preview" zum Suchen mittels Texteingabe
Zitat:
|
AW: "Live Preview" zum Suchen mittels Texteingabe
Nach den ersten x Zeichen (3 ist schon mal eine gute Wahl) werden die Daten beim Server abgeholt. Alle weiteren werden dann im
![]() |
AW: "Live Preview" zum Suchen mittels Texteingabe
Nichts machen, bis der Benutzer aufhört zu tippen. (z.B. Bei jedem Tastendruck einen Timer starten, der auf 100ms eingestellt ist. Im OnTimer des Timers dann die Suche ausführen).
Ich würde das per ADO mit FetchAsync laufen lassen. Bei jedem Neustart der Suche (siehe Timer) wirst Du die aktuelle Query ggf. abbrechen (geht bei FetchAsync ganz einfach) und neu starten. Die Daten kommen vom Server dann schön asynchron, in Happen und alles sieht sehr flüssig aus. Isses auch. Nur wenn der Server richtig ackern muss (weil eine Suchspalte nicht indexiert ist), dauert das Abbrechen und die Sache kommt ins Stottern. Deshalb nimmt man für eine coole Livesuche auch einen Volltextindex, aber das ist wieder eine etwas andere Geschichte (Indexed View mit PK und Suchtext usw.) Oder Du machst alles einfach in-memory und spielst mit der OnFilterRecord Geschichte herum. Das ist aber auch erstaunlich langsam, also immer schön im Hintergrund filtern. Zitat:
Ach, MSSQL ist ideal dafür. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:46 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-2025 by Thomas Breitkreuz