Was macht XbpBrowse:ForceStable() eigentlich?
Moderator: Moderatoren
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9361
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Was macht XbpBrowse:ForceStable() eigentlich?
Siehe Threadüberschrift. Was macht diese Methode genau? Weiß das jemand? Mir ist bewußt, daß man sie nach dem Hinzufügen, Löschen und Verschieben von Spalten aufrufen sollte - aber wann noch?
Herzlich,
Tom
Tom
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo Tom,
laut Handbuch macht die Methode 'stabilisiert die Anzeige ... indem ein kompletter Stabilisierungszyklus durchführt'.
also wird die Anzeige komplett neu aufgebaut, intern etwa:
1. DBF - dbSkip(0) // zuerst alle DBF Felder neu einlesen
2. oBrowse:dbrefreshall() // alle Änderungen einlesen (erzwingen)
3. warten, bis alle Daten in allen Zellen erneut angezeigt wurden
...
Nachdem forcestable() = .t. ist, stimmt die Anzeige mit der DBF überein.
Auf jeden Fall aufrufen, wenn
- ein Filter/Scope oder die Indexreihenfolge geändert wird, das bekommt der Browser nicht immer mit !
- bei Änderungen in der DBF direkt. (Änderungen im Browser müsste dieser mitbekommen ...)
- nach einiger Zeit wenn man Daten einer gesharten DBF anzeigt, da ja andere PCs ändern könnten ...
laut Handbuch macht die Methode 'stabilisiert die Anzeige ... indem ein kompletter Stabilisierungszyklus durchführt'.
also wird die Anzeige komplett neu aufgebaut, intern etwa:
1. DBF - dbSkip(0) // zuerst alle DBF Felder neu einlesen
2. oBrowse:dbrefreshall() // alle Änderungen einlesen (erzwingen)
3. warten, bis alle Daten in allen Zellen erneut angezeigt wurden
...
Nachdem forcestable() = .t. ist, stimmt die Anzeige mit der DBF überein.
Auf jeden Fall aufrufen, wenn
- ein Filter/Scope oder die Indexreihenfolge geändert wird, das bekommt der Browser nicht immer mit !
- bei Änderungen in der DBF direkt. (Änderungen im Browser müsste dieser mitbekommen ...)
- nach einiger Zeit wenn man Daten einer gesharten DBF anzeigt, da ja andere PCs ändern könnten ...
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
hi,
die "Anzeige" :stable ist. Dies kann man durch Forcestable()
erreichen
gruss by OHR
Jimmy
Immer wenn sich was in der "Anzeige" ändert muss man "warten" bisSiehe Threadüberschrift. Was macht diese Methode genau? Weiß das jemand? Mir ist bewußt, daß man sie nach dem Hinzufügen, Löschen und Verschieben von Spalten aufrufen sollte - aber wann noch?
die "Anzeige" :stable ist. Dies kann man durch Forcestable()
erreichen
Code: Alles auswählen
//
// Beipiel TBrowse
//
PROCEDURE ForceStable( oBrowse )
DISPBEGIN()
DO WHILE .NOT. oBrowse:stabilize()
ENDDO
DISPEND()
RETURN
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
he, was fragst du erst, wenn du nachher auch noch probieren gehst offensichtlich überwacht in diesem Falle forcestable() nur die Vollständigkeit der Anzeige der Daten aus dem PUFFER, nicht aber das Einlesen des Puffers von der Festplatte.Tom hat geschrieben:Deine Antwort kannst Du Dir selbst falsifizieren. Bau einfach mal ein DB-Browse und ändere die Datenbank von einer anderen Applikation aus,
Irre ich mich oder führt aber ein refreshall nicht automatisch auch einen forcestable aus ?
Wenn ja braucht man forcestable nur um sicher zu gehen, dass die Anzeige aktuell ist bevor man etwas anderes machen will (frag nicht was, ich nehm immer refreshall wenn ich nicht sicher bin).
PS: ich habe den Quellcode von Xbase++ forcestable zur Zeit grad nicht vorliegen
Gruß
Hubert
Hubert
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9361
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Hallo, Hubert.
Tatsächlich aber gehe ich davon aus, daß :ForceStable nichts mit der Datenquelle zu tun hat, sondern lediglich für eine grafische Stabilisierung der Browser-Anzeige sorgt. Alles andere machen :RefreshCurrent und :RefreshAll.
Das bringt mich auf eine Idee - ich müßte ihn nämlich haben, denn der XbpBrowse-Quellcode ist ja in der ProfSub enthalten!PS: ich habe den Quellcode von Xbase++ forcestable zur Zeit grad nicht vorliegen
Tatsächlich aber gehe ich davon aus, daß :ForceStable nichts mit der Datenquelle zu tun hat, sondern lediglich für eine grafische Stabilisierung der Browser-Anzeige sorgt. Alles andere machen :RefreshCurrent und :RefreshAll.
Herzlich,
Tom
Tom
- andreas
- Der Entwickler von "Deep Thought"
- Beiträge: 1902
- Registriert: Mi, 28. Sep 2005 10:53
- Wohnort: Osnabrück
- Hat sich bedankt: 4 Mal
- Kontaktdaten:
Hallo Tom,Tom hat geschrieben:Hallo, Hubert.
Das bringt mich auf eine Idee - ich müßte ihn nämlich haben, denn der XbpBrowse-Quellcode ist ja in der ProfSub enthalten!PS: ich habe den Quellcode von Xbase++ forcestable zur Zeit grad nicht vorliegen
Tatsächlich aber gehe ich davon aus, daß :ForceStable nichts mit der Datenquelle zu tun hat, sondern lediglich für eine grafische Stabilisierung der Browser-Anzeige sorgt. Alles andere machen :RefreshCurrent und :RefreshAll.
ich benutze nur die beiden Methode :RefreshCurrent und :RefreshAll.
ForceStable-Methode habe ich noch nie gebraucht und irgendwie glaube ich nicht, dass man diese überhaupt anfassen muss. Vielleicht in irgenwelchen besonderen Fällen!?
- 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
hi,
Im TBrowse muss ich ein :stable haben bevor eine weitere
Aktion erfolgen kann.
dieses kann man auch in C:\ALASKA\XPPW32\SOURCE\SYS\BrowSys.prg
sehen. Unter GUI hab ich es bisher nur bei "Bewegungen" im oBrowse
gesehen :
gruss by OHR
Jimmy
vielleicht muss man zwischen TBrowse und XbpBrowse unterscheiden.andreas hat geschrieben: ForceStable-Methode habe ich noch nie gebraucht und irgendwie glaube ich nicht, dass man diese überhaupt anfassen muss. Vielleicht in irgenwelchen besonderen Fällen!?
Im TBrowse muss ich ein :stable haben bevor eine weitere
Aktion erfolgen kann.
Code: Alles auswählen
DISPBEGIN()
DO WHILE (nKey := INKEY()) == 0 //.AND. !oBrowse:stabilize()
IF oBrowse:stabilize()
EXIT
ENDIF
ENDDO
DISPEND()
IF oBrowse:stable
sehen. Unter GUI hab ich es bisher nur bei "Bewegungen" im oBrowse
gesehen :
Code: Alles auswählen
oBrowse:right()
oBrowse:forceStable()
...
oBrowse:left()
oBrowse:forceStable()
...
INLINE METHOD GoTop()
::EvenRow := .T.
::XbpQuickbrowse:GoTop()
RETURN ::ForceStable()
...
INLINE METHOD GoBottom()
::EvenRow := .T.
::XbpQuickbrowse:GoBottom()
RETURN ::ForceStable()
...
Eval( bBlock, ::browser )
::browser:forceStable()
Jimmy