Combobox mit vielen Einträgen

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
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

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
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

Beitrag von Rolf Ramacher »

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
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Friedhelm
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 46
Registriert: Sa, 08. Apr 2006 17:20
Wohnort: Leverkusen
Kontaktdaten:

Re: Combobox mit vielen Einträgen

Beitrag von Friedhelm »

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?
Gruß Friedhelm
Benutzeravatar
Jan
Marvin
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

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
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

Beitrag von AUGE_OHR »

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.
ok ... aber du kannst doch sowieso nur so viele Daten anzeigen wie "Platz" vorhanden ist.

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
Benutzeravatar
brandelh
Foren-Moderator
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

Beitrag von brandelh »

Combobox ... 170.000 Einträge ...
ich sehe die Ladezeit von einigen Sekunden beim Fensterstart weniger als Problem an.
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() )
so wird immer oben der neuesten Eintrag angezeigt (links beginnend mit time() Angabe).
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 :wink:
Gruß
Hubert
Benutzeravatar
Jan
Marvin
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

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
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

Beitrag von Tom »

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.
Herzlich,
Tom
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
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

Beitrag von Rolf Ramacher »

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.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Jan
Marvin
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

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
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

Beitrag von Herbert »

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...
Benutzeravatar
Jan
Marvin
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

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten