Combobox mit vielen Einträgen
Moderator: Moderatoren
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Combobox mit vielen Einträgen
Gerade stoße ich auf ein Problem in meinem Programm: Ich habe dort diverse Comboboxen, die erst bei Fokuserhalt ihren Inhalt bekommen (um immer aktuell zu sein). Nun sind das mit einem neuen Test-Datenbestand aber ca. 170.000 Einträge. Was dann unerträglich lange dauert, bis das SLE Eingaben entgegen nimmt. Kann mir jemand einen Tipp geben, wie das eleganter bzw. vor allem schneller zu lösen wäre?
Jan
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1931
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Combobox mit vielen Einträgen
Hi Jan.
was dauert denn so lange . das Laden der 170.000 Einträge, oder bis der User was ausgewählt hat. Zeig uns doch mal den code
was dauert denn so lange . das Laden der 170.000 Einträge, oder bis der User was ausgewählt hat. Zeig uns doch mal den code
- Friedhelm
- Cut&Paste-Entwickler
- Beiträge: 46
- Registriert: Sa, 08. Apr 2006 17:20
- Wohnort: Leverkusen
- Kontaktdaten:
Re: Combobox mit vielen Einträgen
Hallo Jan
Also 170000 Einträge sind in der Tat ein Zeitproblem, vor allem dann, wenn diese dynamisch gefüllt werden sollen.
Warum bastelst du dir nicht einfach eine eigene Combobox, die eine kleinen Quickbrowse aufklappt?
Damit würdest du dir auch das dymamische Füllen sparen, in dem du lediglich einen Filter oder Scope setzt?
Also 170000 Einträge sind in der Tat ein Zeitproblem, vor allem dann, wenn diese dynamisch gefüllt werden sollen.
Warum bastelst du dir nicht einfach eine eigene Combobox, die eine kleinen Quickbrowse aufklappt?
Damit würdest du dir auch das dymamische Füllen sparen, in dem du lediglich einen Filter oder Scope setzt?
Gruß Friedhelm
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Combobox mit vielen Einträgen
Hallo Friedhelm,
ja, an irgendwas in der Richtung hatte ich auch gedacht. Aber "einfach basteln" ist nicht bei mir. Ich bin kein Klassenmensch, ich weiß nicht einmal, wie und wo ich da anfangen sollte.
Ich brauche übrigens keine Scopes oder Filter. Ich muß wirklich die komplette dbf enlesen (nicht alle Felder, aber alle Sätze). Dynamisch aber deswegen, weil Sätze in einem anderen Thread hinzugekommen oder geändert worden sein könnten seit dem letzten Aufruf.
Jan
ja, an irgendwas in der Richtung hatte ich auch gedacht. Aber "einfach basteln" ist nicht bei mir. Ich bin kein Klassenmensch, ich weiß nicht einmal, wie und wo ich da anfangen sollte.
Ich brauche übrigens keine Scopes oder Filter. Ich muß wirklich die komplette dbf enlesen (nicht alle Felder, aber alle Sätze). Dynamisch aber deswegen, weil Sätze in einem anderen Thread hinzugekommen oder geändert worden sein könnten seit dem letzten Aufruf.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Combobox mit vielen Einträgen
ok ... aber du kannst doch sowieso nur so viele Daten anzeigen wie "Platz" vorhanden ist.Jan hat geschrieben:bis das SLE Eingaben entgegen nimmt ...
Ich brauche übrigens keine Scopes oder Filter. Ich muß wirklich die komplette dbf enlesen (nicht alle Felder, aber alle Sätze). Dynamisch aber deswegen, weil Sätze in einem anderen Thread hinzugekommen oder geändert worden sein könnten seit dem letzten Aufruf.
Du könnst aber schon in ein SLE "eingeben" wenn du eine leere / nicht sichtbare Listbox hast.
Die Listbox "reagiert" erst wenn der User was im SLE "eingibt" z.b. "A" -> Anzeige mit "A" am Anfang
für das "reagieren" ist nun ein Thread zuständig der den :datalink der Combobox "auswertet" ( EVAL() ) und die gefundenen Daten in die Listbox überträgt.
Beispiel hierzu ist das "The Multi-Threading Tutorial (Part II)" ab Seite 13
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15710
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 73 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Combobox mit vielen Einträgen
ich sehe die Ladezeit von einigen Sekunden beim Fensterstart weniger als Problem an.Combobox ... 170.000 Einträge ...
Aber wie soll der Anwender eine Combobox mit 170.000 Einträgen bedienen ?
Eine Listbox mit 20 oder 30 Zeilen wäre dabei schon maßlos überfordert, aber eine aufklappbare combo ?
Du könntest sowas wie ein SLE bauen, das mit einer Listbox gekoppelt ist und ab dem 2. oder 3. Buchstaben nur noch die gefilterten Auswahlsätze nachlädt.
OK. Du willst alle dynamisch geänderten und hinzugekommenen Datensätze anzeigen ... ähm wie und wo bitte ? in einer 170.000 Zeilen fassenden Liste ?
Ich lasse für solche Anzeigen (was macht er gerade) MLEs ...
Code: Alles auswählen
oMLE:setData( cNeuerText + cCRLF + oMLE:EditBuffer() )
Allerdings habe ich selten mehr als 50 Zeilen ... du könntest ja aber die max. Anzeige auf z.B. einige KB begrenzen ( left() ) ...
Egal wie solltest du dein Konzept überdenken
Gruß
Hubert
Hubert
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Combobox mit vielen Einträgen
Hallo Hubert,
ganz so schlimm ist das mit der Bedienung nicht. Denn der Listboxteil wird normalerweise nicht durchsucht, das wäre bei dermaßen vielen Einträgen dann wirklich eine Katastrophe. Nein, der Listboxteil wird nur benutzt, um den Eintrag anzuzeigen, der als erstes den Eingaben im SLE-Teil entspricht, und dann die vorangehenden und folgenden Einträge anzusehehen und eventuell auszuwählen.
Jan
ganz so schlimm ist das mit der Bedienung nicht. Denn der Listboxteil wird normalerweise nicht durchsucht, das wäre bei dermaßen vielen Einträgen dann wirklich eine Katastrophe. Nein, der Listboxteil wird nur benutzt, um den Eintrag anzuzeigen, der als erstes den Eingaben im SLE-Teil entspricht, und dann die vorangehenden und folgenden Einträge anzusehehen und eventuell auszuwählen.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 105 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: Combobox mit vielen Einträgen
Hallo, Jan.
Verstehe ich das richtig? Ins SLE kann man etwas tippen, und die Listbox wird quasi zum Auto-Vervollständigen benötigt? Das kann man über den Keyboard-Slot des SLE eleganter lösen, der dann auch mit SEEK die Datenbank durchsuchen kann - es müsste also nichts in ein Array "umgeladen" werden. Zusätzlich könnte man einen Popup-Button neben das SLE setzen, der in ein (Quick-)Browse verzweigt, das wiederum mit einer Schnellsuchfunktion (SLE, Keyboard-Slot abfangen) ausgestattet ist.
Verstehe ich das richtig? Ins SLE kann man etwas tippen, und die Listbox wird quasi zum Auto-Vervollständigen benötigt? Das kann man über den Keyboard-Slot des SLE eleganter lösen, der dann auch mit SEEK die Datenbank durchsuchen kann - es müsste also nichts in ein Array "umgeladen" werden. Zusätzlich könnte man einen Popup-Button neben das SLE setzen, der in ein (Quick-)Browse verzweigt, das wiederum mit einer Schnellsuchfunktion (SLE, Keyboard-Slot abfangen) ausgestattet ist.
Herzlich,
Tom
Tom
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1931
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Combobox mit vielen Einträgen
Hi Jan,
ist die vorgehensweise richtig die Tom anspricht. ?? Ich mache das dann genauso ein xbpbrowse mit einem sle-suchfeld.
welches automatisch nach eingabe mit index sucht. - mache ich bei Suche nach Artikelnr.
ist die vorgehensweise richtig die Tom anspricht. ?? Ich mache das dann genauso ein xbpbrowse mit einem sle-suchfeld.
welches automatisch nach eingabe mit index sucht. - mache ich bei Suche nach Artikelnr.
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Combobox mit vielen Einträgen
Hallo Tom,
gute Idee. Muß ich mir mal Gedanken drum machen, wie ich das am elegantesten löse. Denn im Prinzip soll der User das Gefühl haben, da eine ganz normale Combobox zu haben.
Ich habe allerdings auch noch nie mit einem XbpQuickBrowse gearbeitet, das muß ich erstmal verinnerlichen.
Jan
gute Idee. Muß ich mir mal Gedanken drum machen, wie ich das am elegantesten löse. Denn im Prinzip soll der User das Gefühl haben, da eine ganz normale Combobox zu haben.
Ich habe allerdings auch noch nie mit einem XbpQuickBrowse gearbeitet, das muß ich erstmal verinnerlichen.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Herbert
- Der Entwickler von "Deep Thought"
- Beiträge: 1991
- Registriert: Do, 14. Aug 2008 0:22
- Wohnort: Gmunden am Traunsee, Österreich
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Combobox mit vielen Einträgen
Tom hat geschrieben:Hallo, Jan.
Verstehe ich das richtig? Ins SLE kann man etwas tippen, und die Listbox wird quasi zum Auto-Vervollständigen benötigt? Das kann man über den Keyboard-Slot des SLE eleganter lösen, der dann auch mit SEEK die Datenbank durchsuchen kann - es müsste also nichts in ein Array "umgeladen" werden. Zusätzlich könnte man einen Popup-Button neben das SLE setzen, der in ein (Quick-)Browse verzweigt, das wiederum mit einer Schnellsuchfunktion (SLE, Keyboard-Slot abfangen) ausgestattet ist.
Mit Tom's Methode kannst du weiterhin eine Combox füllen. Ich mache dasselbe in einem Suchfenster. Jeder getippte Buchstabe (oder Zahl) zeigt die "Matches" an, die du nach unten begrenzen kannst.
Grüsse Herbert
Immer in Bewegung...
Immer in Bewegung...
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Combobox mit vielen Einträgen
Herbert,
nee, das ist nicht gut. Der User will ja eventuell (wenn das weniger Einträge sind, was der Normalzustand ist) die Listbox aufklappen und da was sehen. Und das Problem ist das Einlesen all der Datensätze in die Listbox - das dauert einfach viel zu lange. Von daher ist eine wie auch immer geartete Browse-Geschichte sehr gut, denn da muß ich nicht vorab einlesen.
Jan
nee, das ist nicht gut. Der User will ja eventuell (wenn das weniger Einträge sind, was der Normalzustand ist) die Listbox aufklappen und da was sehen. Und das Problem ist das Einlesen all der Datensätze in die Listbox - das dauert einfach viel zu lange. Von daher ist eine wie auch immer geartete Browse-Geschichte sehr gut, denn da muß ich nicht vorab einlesen.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.