| |
VB.NET - FortgeschritteneSuche verzögert starten | | | Autor: msSuper | Datum: 05.10.17 14:30 |
| Hallo liebes Forum,
in einer Anwendung in der ich in einem großen Datenbestand filtern kann. möchte ich gerne eine automatische Suche starten, sobald sich der Text in der Filtereingabe = TextBox ändert.
Derzeit startet die Suche erst dann, wenn entweder der Button "Filter" oder F5- gedrückt wird.
Sicher fragt ihr euch - warum bindet der nicht einfach das ValueChanged Ereignis an?
Das Problem ist, dass die Suche ziemlich lange (>1 Sek) dauert und dann keine flüssige Eingabe mehr bei längeren Suchwörtern möglich ist.
Irgendwie müsste ich es hinbekommen, dass die Suche nur dann startet, wenn sagen wir mal 1 Sekunde keine Taste gedrückt wurde.
Wie kann ich sowas hinbekommen? | |
Re: Suche verzögert starten | | | Autor: Manfred X | Datum: 05.10.17 14:59 |
| Hallo!
Bei jedem Tastendruck die Uhrzeit speichern und
in einem 125ms-Timer prüfen, ob diese Uhrzeit mindestens
1 Sekunde zurückliegt und ob eine Such-Zeichenfolge
vorliegt --> Suche starten.
Die Suche sollte in einem Hintergrundprozeß laufen.
Eine eventuell bereits laufende Suche wäre zunächst
abzubrechen, ehe die neue Suche begonnen wird.
Wie die Anzeige des Suchergebnisses in einem Control
zu realisieren ist, kann ohne nähere Angaben nicht
beurteilt werden.
Welchen Vorteil diese automatisierte Strategie gegenüber
der Betätigung eines Such-Buttons bietet, erschließt sich
mir nicht. | |
Re: Suche verzögert starten | | | Autor: msSuper | Datum: 05.10.17 15:17 |
| Danke.
Werde ich mal versuchen nachzubauen.
Der Vorteil für den Anwender ist, dass er bei längeren Worten, deren Schreibweise nicht genau bekannt ist rasch eine Rückmeldung bekommt, wie die exakte Schreibweise ist und das ohne mit der Maus zu klicken - oder ohne den Schreibfluss mit F5 zu verlassen. | |
Re: Suche verzögert starten | | | Autor: Manfred X | Datum: 05.10.17 15:58 |
| Meist werden die Suchbegriffe zunächst komplett eingegeben
und danach prüft das Programm, ob diese Begriffe zu finden sind.
Ist dies nicht der Fall, werden z.B. anhand der Levenshtein-Distanz
ähnliche Begriffe gesucht und als Auswahl dem Benutzer angezeigt. | |
Re: Suche verzögert starten | | | Autor: Franki | Datum: 07.10.17 03:19 |
| Hallo,
das siehst du meiner Meinung nach falsch.
Denn bei unbekannten oder längeren Wörtern ist die Autovervollständigung eher nervig als hilfreich.
Und eine Rechtschreibprüfung kann so etwas schon gar nicht leisten. Schon gar nicht wenn da noch die Grammatik ins Spiel kommt.
Sinnvoll sind solche Sachen bei standardisierten Floskeln oder Abkürzungen wie z.B. mfg für mit freundlichen Grüßen, oder halt auch benuterdefiniert festlegen was welche Kürzel bedeuten.
Schau dir mal die aktuellen Smartphones an, da bekommst du auch Vorschläge für eine evtl. korrekte Schreibweise von dem was am Anfang des Wortes so getippt wird, aber in den seltensten Fällen ist der erste Vorschlag der richtige.
Wenn um Fachvokabular geht mußt bzw. kannst du das selbst hinterlegen was da angeboten wird. Das ist sinnvoll und gut, aber sich auf allgemeine Funktionen zu verlassen ist eher kontraproduktiv weil die User einfach klicken wenn etwas vermeintlich richtiges angeboten wird.
Gruß
Frank | |
Re: Suche verzögert starten | | | Autor: msSuper | Datum: 10.10.17 07:30 |
| Franki schrieb:
Zitat: | |
Wenn um Fachvokabular geht mußt bzw. kannst du das selbst
hinterlegen was da angeboten wird. Das ist sinnvoll und gut,
aber sich auf allgemeine Funktionen zu verlassen ist eher
kontraproduktiv weil die User einfach klicken wenn etwas
vermeintlich richtiges angeboten wird.
| |
Es geht um Fachvokabular.
Die Datenbank mit den Suchbegriffen baut sich täglich mit schreiben von neuen Belegen, Angeboten, Bestellungen, Rechnungen etc. immer weiter auf.
Der Benutzerkreis ist ziemlich eng und es arbeitet nur Fachpersonal mit dem System.
Durch die Anbindung "lernt" das System natürlich immer mehr gültige Worte (~Zumindest Worte, die in den Belegen vorkommen...) Dadurch wiederum lassen sich die Belege bzw die Vorgänge dazu wieder finden.
Eine Vorschlagsliste mit Suchworten bringt dann schon sehr viel.
Denke z.B. mal an die vielen Fachbegriffe im Chemiebereich.
Mit dem Vorschlag von Manfred X bin ich auch schon weiter gekommen.
Klemmen tut es derzeit mit dem Abbrechen, des noch laufenden Suchvorganges.
90% der Zeit braucht die eigentliche Datenbankabfrage (SQL Server) mit einem SELECT A,B,C FROM .... aus ca 1 Million Datensätze. Da weiß ich nicht wie ich das abbrechen könnte.
Das füllen des Datagrids hingegen geht rasend schnell. | |
Re: Suche verzögert starten | | | Autor: Manfred X | Datum: 10.10.17 12:26 |
| Wenn Du einen Suchvorgang abbrechen willst,
muß in Deinem Suchalgorithmus ein Codepunkt
vorhanden sein, der während einer Suche
(die in einem eigenen Thread läuft) regelmäßig
erreicht wird.
Dort wird ein Cancel-Boolean abgefragt und
ggf. wird abgebrochen.
Falls Du eine laufende Suche vorzeitig beenden willst,
wird dieser Cancel-Button im GUI-Thread auf true gesetzt.
(Vor Beginn einer neuen Suche wieder auf false setzen!) | |
Re: Suche verzögert starten | | | Autor: msSuper | Datum: 11.10.17 15:00 |
| Manfred X schrieb:
Zitat: | |
...muß in Deinem Suchalgorithmus ein Codepunkt
vorhanden sein, der während einer Suche
(die in einem eigenen Thread läuft) regelmäßig
erreicht wird.
| |
Der Suchalgorithmus ist eine SQL Server Abfrage, da lasse ich mir eine komplette Tabelle füllen und zeige sie dann in einem Datagrid an.
Die Anzahl der Zeilen die ich zurück erhalte ist Standardmäßig begrenzt (~ mit 200 Voreingestellt)
Also sowas wie SELECT TOP 200 a,b,c FROM tblD WHERE ...
Kann man sowas abbrechen? | |
Re: Suche verzögert starten | | | Autor: Manfred X | Datum: 11.10.17 17:07 |
| Hallo!
Aktuelle (server-) DB-Konzepte zielen auf eine Minimierung des Datentransfers
bzw. der Häufigkeit der Transfers zwischen Anwendung und DB.
Insofern ist es kaum zu empfehlen, eine dynamisch angestoßene Suche über
eine DB-Abfrage laufen zu lassen.
Falls möglich, lade die Begriffe in der/den Such-Spalte(n) komplett in den
Hauptspeicher (UNIQUE) und führe die Suche dort durch
(eventuell diese Begriffe sortieren und eine BinarySearch auf einer Liste
verwenden - abbrechen nicht nötig, weil superschnell!).
Beitrag wurde zuletzt am 11.10.17 um 17:11:37 editiert. | |
Re: Suche verzögert starten | | | Autor: msSuper | Datum: 12.10.17 08:45 |
| Manfred X schrieb:
Zitat: | |
Falls möglich, lade die Begriffe in der/den Such-Spalte(n)
komplett in den Hauptspeicher (UNIQUE) und führe die Suche dort durch
(eventuell diese Begriffe sortieren und eine BinarySearch auf
einer Liste verwenden - abbrechen nicht nötig, weil
superschnell!). | |
WOW! Was ist das schnell!
Das geht jetzt so flott, da brauche ich überhaupt keine Verzögerung der Suche und auch kein Abbrechen einzubauen.
Dieses Tipp ist echt Gold Wert.
Das Datagrid baut sich nun während des tippens flüssig auf.
HIERMIT BEDANKE MICH AUSDRÜCKLICK!!! | |
Re: Suche verzögert starten | | | Autor: Franki | Datum: 14.10.17 01:26 |
| Hallo Manfred X
Zitat: | |
Aktuelle (server-) DB-Konzepte zielen auf eine Minimierung
des Datentransfers bzw. der Häufigkeit der Transfers zwischen Anwendung und DB. | |
Ja das stimmt, aber es war in der Praxis eigentlich immer schon so. Ich erinnere mich an die ersten Zeiten per ASP auf eine MDB die auf einem Server lag und die Internetverbindung noch langsam war.
Auch damals galt es den Traffic zu minimieren und nur so wenig wie möglich Daten hin und her zu schaufeln.
Und Geschwindigkeit ist trotz moderner Hardware immer noch ein entscheidendes Thema. Deswegen vermeide ich auch wenn möglich alle Filter die erst einen kompletten Datenbestand vom Server lesen um ein Grid oder sonst was zu füllen und dann nachher aussortieren zu müssen entsprechend den Filterkritierien.
Und grade wenn man heutzutage mit einer Cloud, einer nicht wirklich vorhandenen Flatrate bei einem Smartphone usw. arbeitet spielt das Datenvolumen immer noch eine entscheidende Rolle.
Gruß
Frank | |
Re: Suche verzögert starten | | | Autor: Manfred X | Datum: 14.10.17 11:27 |
| Hallo!
Ich wollte darauf hinweisen, daß die Funktionalität von Datenbanken
ständig erweitert wird, so daß viele Such-, Filter- oder Transformations-
Aufgaben sowie Konsistenzprüfungen in die DB eingebettet werden können.
Im Fall einer dynamischen Datensatz-Suche, die ständig unmittelbar auf
Benutzer-Eingaben reagieren soll, ist es aber dennoch meist effizienter,
die Suchbegriffe zunächst vollständig in den Hauptspeicher des Rechners zu
laden.
Wird die Suche erst gestartet, wenn der Benutzer einen Begriff bereits
vollständig eingegeben hat, - z.B. weil zusätzlich ein Algorithmus eingesetzt
wird, der bei möglichen Schreibfehlern dem Benutzer alternative Such-Begriffe
vorschlägt -, könnte eine DB-Einbettung dieser Routinen zweckmäßig sein. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats März 2024 Dieter OtterUTF-8 Konvertierung von Dateien und StringsVB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. sevAniGif (VB/VBA)
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere Infos
|