vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2017
 
zurück

Neue Version! sevEingabe 3.0 (für VB6 und VBA)
Das Eingabe-Control der Superlative! Noch besser und noch leistungsfähiger!
Jetzt zum Einführungspreis       - Aktionspreis nur für kurze Zeit gültig -

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Suche 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?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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!)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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!!!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2017 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel