Scrollbalken bei set Filter
Moderator: Moderatoren
Scrollbalken bei set Filter
Hallo,
der vertikale Scrollbalken scheint, wenn ich einen Filter setze, nicht mehr richtig zu funktionieren. Es scheint so wenn der Balken dann die Position jedes Datensatzes in der ganzen Datenbank anzeigt. Wäre das denkbar?
mfg
Wolfgang
der vertikale Scrollbalken scheint, wenn ich einen Filter setze, nicht mehr richtig zu funktionieren. Es scheint so wenn der Balken dann die Position jedes Datensatzes in der ganzen Datenbank anzeigt. Wäre das denkbar?
mfg
Wolfgang
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: Scrollbalken bei set Filter
Was meinst Du?
Hast Du vielleicht ein XbpBrowse, welches sich auf eine Tabelle mit Filter bezieht?
Alaska hat da den Scrollbalken nicht gut implementiert. Wenn ein Filter gesetzt ist, dann kann XbpBrowse die Position nur dann korrekt bestimmen, wenn es zuvor sämtliche dem Filter entsprechende Datensätze untersucht hat. Und dass kann (natürlich) zu viel zu großen Zeitverzögerungen führen! Besser wäre meines Erachtens, wenn der Scrollbalken in diesen Fällen grundsätzlich (außer beim ersten und letzten Datensatz) in der Mitte stehen würde.
Uli
Hast Du vielleicht ein XbpBrowse, welches sich auf eine Tabelle mit Filter bezieht?
Alaska hat da den Scrollbalken nicht gut implementiert. Wenn ein Filter gesetzt ist, dann kann XbpBrowse die Position nur dann korrekt bestimmen, wenn es zuvor sämtliche dem Filter entsprechende Datensätze untersucht hat. Und dass kann (natürlich) zu viel zu großen Zeitverzögerungen führen! Besser wäre meines Erachtens, wenn der Scrollbalken in diesen Fällen grundsätzlich (außer beim ersten und letzten Datensatz) in der Mitte stehen würde.
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Scrollbalken bei set Filter
Der Scrollbalken ist recht einfach gehalten, MIN MAX Werte bestimmen die Rahmen und der aktuelle Wert die aktuelle Position des "Schiebereglers".
Wenn man weder Filter noch Index hat, war das schon immer einfach 1, LastRec(), RecNo().
Mit Index war das immer ein Problem, aber Xbase seit ( ? ) kennt:
Der einzige Ausweg wäre die genaue Anzahl angezeigter Datensätze zu ermitteln und eine Art von Laufzähler zu bauen, je nach Datenbestand SEHR LANGSAM und wenn neue hinzu kommen wirklich unschön.
Du kannst aber auch eine eigene Funktion angeben, die wie vorgeschlagen 50% ausgibt, solange nicht BOF() oder EOF() erreicht ist (dann 0 bzw. 100)
Oder aber dbPosition() und zusätzlich BOF() und EOF() um das Ergebnis zu verbessern sobald die Grenzen erreicht sind.
Ich muss zugeben, dass mir dieser Aufwand immer zuviel war
Wenn man weder Filter noch Index hat, war das schon immer einfach 1, LastRec(), RecNo().
Mit Index war das immer ein Problem, aber Xbase seit ( ? ) kennt:
Grundsätzlich müsste dbPosition() auch mit Filter funktionieren, wenn aber am Anfang und Ende viele Sätze übersprungen werden wird es etwa unschön.Handbuch hat geschrieben: DbPosition() --> nPercent
Rückgabe
Die Funktion gibt einen Wert zwischen 0 und 100 zurück. Er kennzeichnet die Position des Satzzeigers als Prozentwert.
Beschreibung
Mit der Funktion DbPosition() wird die Position des Satzzeigers als Prozentwert ermittelt. Sie arbeitet unabhängig davon ob in der Workarea ein kontrollierender Index aktiv ist oder nicht. Damit kann die Position des Satzzeigers sehr einfach mit einem Scrollbar visualisiert werden. Der Wertebereich für den Scrollbar muß zwischen 0 und 100 liegen,
Der einzige Ausweg wäre die genaue Anzahl angezeigter Datensätze zu ermitteln und eine Art von Laufzähler zu bauen, je nach Datenbestand SEHR LANGSAM und wenn neue hinzu kommen wirklich unschön.
Du kannst aber auch eine eigene Funktion angeben, die wie vorgeschlagen 50% ausgibt, solange nicht BOF() oder EOF() erreicht ist (dann 0 bzw. 100)
Oder aber dbPosition() und zusätzlich BOF() und EOF() um das Ergebnis zu verbessern sobald die Grenzen erreicht sind.
Ich muss zugeben, dass mir dieser Aufwand immer zuviel war
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Scrollbalken bei set Filter
wie Huber schon sagte "sollte" es funktionieren in einem Browse.
was für ein Umstand es mit Index und Scrollbar ist kannst du im Help Beispiel für OrdKeyNo() mit TBrowse sehen
wenn man nun einen Filter verwendet will man ja nur eine Teilmenge haben ... ähnlich einer SQL Query.
wenn du also die Ergebnisse eines Filter / Query in einem Array sammelst und das im Browse anzeigst dann hast du auch keine Problem mit dem Scrollbar
was für ein Umstand es mit Index und Scrollbar ist kannst du im Help Beispiel für OrdKeyNo() mit TBrowse sehen
wenn man nun einen Filter verwendet will man ja nur eine Teilmenge haben ... ähnlich einer SQL Query.
wenn du also die Ergebnisse eines Filter / Query in einem Array sammelst und das im Browse anzeigst dann hast du auch keine Problem mit dem Scrollbar
gruss by OHR
Jimmy
Jimmy
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: Scrollbalken bei set Filter
Das stimmt. Allerdings müssen dann auch alle Datensätze vor dem Anzeigen gelesen werden, was gegebenenfalls auch zu unerwünschten Wartezeiten führt ...AUGE_OHR hat geschrieben:...wenn man nun einen Filter verwendet will man ja nur eine Teilmenge haben ... ähnlich einer SQL Query.
wenn du also die Ergebnisse eines Filter / Query in einem Array sammelst und das im Browse anzeigst dann hast du auch keine Problem mit dem Scrollbar
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- Martin Altmann
- Foren-Administrator
- Beiträge: 16509
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Scrollbalken bei set Filter
Ratzfatz funktioniert das mit DbEval(), unter Angabe der passenden Filterbedingung als zweiten Codeblock(parameter).
Viele Grüße,
Martin
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Scrollbalken bei set Filter
und selbst wenn das Einlesen etwas dauert, die Anzeige danach (mit den Array-Daten) geht rasend schnell
Wenn man sich dann noch die Satznummer merkt, kann man schnell auf einen angezeigten Satz zugreifen (offene DBF verhindert PACK !)
Wenn man sich dann noch die Satznummer merkt, kann man schnell auf einen angezeigten Satz zugreifen (offene DBF verhindert PACK !)
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Scrollbalken bei set Filter
schon mal was von einem dynamischen Auffüllen mittels Thread von Arrays gehört ... aber es geht ja auch gar nicht um das finden der Treffer.UliTs hat geschrieben:Allerdings müssen dann auch alle Datensätze vor dem Anzeigen gelesen werden, was gegebenenfalls auch zu unerwünschten Wartezeiten führt ...
wie schon gesagt die Frage hier war der vertikale Scrollbar wofür DbPosition() (ein einer DBF) zuständig wäre was aber bei FILTER (und bei pgDBE / SQL ) versagt.
gruss by OHR
Jimmy
Jimmy
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: Scrollbalken bei set Filter
Schon mal was davon gehört, dass du bei dynamischen auffüllen von Arrays nicht weißt, wie groß das Array ist?
Und das brauchst Du für die korrekte Umsetzung von DbPosition().
Uli
Und das brauchst Du für die korrekte Umsetzung von DbPosition().
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Scrollbalken bei set Filter
Nicht unbedingt, man könnte bei der Berechnung der aktuellen Position im Array jeweils die Anzahl neu ermitteln.
Dies würde dann zu einem "zurückspringen" der Positionsanzeige führen, aber irgendwas ist immer
Dies würde dann zu einem "zurückspringen" der Positionsanzeige führen, aber irgendwas ist immer
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Scrollbalken bei set Filter
so so ... für ein Array ein DBposition ...UliTs hat geschrieben:Schon mal was davon gehört, dass du bei dynamischen auffüllen von Arrays nicht weißt, wie groß das Array ist?
Und das brauchst Du für die korrekte Umsetzung von DbPosition().
Code: Alles auswählen
oBrowse:skipBlock := {|n,obj| SkipArray( n, obj:cargo ) }
oBrowse:goTopBlock := {|obj| obj:cargo[ ARR_NO ] := 1 }
oBrowse:goBottomBlock := {|obj| obj:cargo[ ARR_NO ] := Len( obj:cargo[ ARR_SRC ] ) }
oBrowse:posBlock := {|obj| obj:cargo[ ARR_NO ] }
oBrowse:phyPosBlock := {|obj| obj:cargo[ ARR_SORT, obj:cargo[ ARR_NO ] ] }
oBrowse:lastPosBlock := {|obj| Len( obj:cargo[ ARR_SRC ] ) }
oBrowse:firstPosBlock := {|obj| 1 }
gruss by OHR
Jimmy
Jimmy
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: Scrollbalken bei set Filter
Da hast Du ja DbPosition() schön für ein Array umgesetzt Aber was soll das bedeuten?AUGE_OHR hat geschrieben:...so so ... für ein Array ein DBposition ...Code: Alles auswählen
oBrowse:skipBlock := {|n,obj| SkipArray( n, obj:cargo ) } oBrowse:goTopBlock := {|obj| obj:cargo[ ARR_NO ] := 1 } oBrowse:goBottomBlock := {|obj| obj:cargo[ ARR_NO ] := Len( obj:cargo[ ARR_SRC ] ) } oBrowse:posBlock := {|obj| obj:cargo[ ARR_NO ] } oBrowse:phyPosBlock := {|obj| obj:cargo[ ARR_SORT, obj:cargo[ ARR_NO ] ] } oBrowse:lastPosBlock := {|obj| Len( obj:cargo[ ARR_SRC ] ) } oBrowse:firstPosBlock := {|obj| 1 }
Und len() innerhalb ::LastPosBlock() ist eine gute Idee. Da hat man zwar keine korrekte aber doch eine vernünftige und akzeptable Lösung für die parallele Erzeugung des Arrays während der Darstellung. Aktualisierst Du dann alle paar Sekunden die Darstellung des Browsers bis das Array fertig erzeugt ist?
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Scrollbalken bei set Filter
Die Vorgehensweise ist schön beschrieben in einem Beitrag von Alaska:
http://www.alaska-software.com/download ... section=40
* MT Tutorial Part I ... The Multi-Threading Tutorial Part I ... oder
* MT Tutorial Part II ... The Multi-Threading Tutorial Part II
http://www.alaska-software.com/download ... section=40
* MT Tutorial Part I ... The Multi-Threading Tutorial Part I ... oder
* MT Tutorial Part II ... The Multi-Threading Tutorial Part II
Gruß
Hubert
Hubert