wie "übersetzte" ich Tbrowse:hitbottom nach XbpBrowse ?
Code: Alles auswählen
DO WHILE .T.
* SKIP
// statt SKIP ein :down()
oBrowse:down()
oBrowse:refreshCurrent()
IF EOF() .OR. oBrowse:hitbottom
EXIT
ENDIF
ENDDO
Jimmy
Moderator: Moderatoren
Code: Alles auswählen
DO WHILE .T.
* SKIP
// statt SKIP ein :down()
oBrowse:down()
oBrowse:refreshCurrent()
IF EOF() .OR. oBrowse:hitbottom
EXIT
ENDIF
ENDDO
Code: Alles auswählen
*** snip ***
SELECT 2
IF RECORDLOCK() // REPLACE
REPLACE IN_MAIL->IN_WAHL WITH "D"
oBrowse:refreshCurrent()
UNLOCK
// soweit sogut. Nachdem der User den Datensatz nun "markiert" hat
// will ich zum nächsten in der Anzeige(!) um den zu "bearbeiten"
DO WHILE .T.
// kein SKIP !!!
* SKIP
// sondern ein :down()
oBrowse:down()
// Zeile anzeigen
oBrowse:refreshCurrent()
// nun soll er nur überprüfen ob er am "Ende" ist
IF EOF() .OR. EVAL( oBrowse:hitBottomBlock )
IF EOF()
// sehe ich NIE
MSGBOX("EOF")
ENDIF
IF EVAL( oBrowse:hitBottomBlock )
// und auch das sehe ich nicht
MSGBOX("EVAL()")
ENDIF
// also komme ich NIE an das EXIT
EXIT
ENDIF
ENDDO
ENDIF // REPLACE
...
STATIC FUNCTION GuiBrowseDB(....)
...
oBrowse := XbpBrowse():new(...)
oBrowse:skipBlock := {|n| DbSkipper(n) }
...
oBrowse:hitBottomBlock := {| | EOF() }
oBrowse:hitTopBlock := {| | BOF() }
...
RETURN oBrowse
*** eof ***
yup, den der DBSkipper setzt ihn "zurück" wenn er EOF/BOF erreichtbrandelh hat geschrieben: aber ich glaube, dass EOF() beim Browser intern abgefangen wird und daher die Abfrage nach EOF() nie .t. wird, weil der Browser immer auf dem letzten Datensatz bleibt.
geht dann auch nur mit :refreshAll() womit dann auch alles in diebrandelh hat geschrieben: Es ist sicherlich sinnvoll o:down() zu verwenden (die Methode des Browsers), statt direkt auf der DBF mit skip zu werkeln, da sonst der Browser nachsyncronisiert werden muss.
genau das war mein Problem, ich habe nix gefunden weder in Helpbrandelh hat geschrieben: Schau doch in den Beispielen nach dort müsste es Beispiele mit korrekt belegten Code-Blöcken geben.
Code: Alles auswählen
oBrowse:hitBottomBlock:= {|| lBottom:= .T. }
.........
lBottom:= .F.
DO WHILE .T.
//
// nach dem :down ein :forceStable !!!
//
oBrowse:down():forceStable()
IF IN_MAIL->IN_WAHL <> "D"
EXIT
ENDIF
IF lBottom
MSGBOX("EOF")
EXIT
ENDIF
ENDDO
tja toll das wir das nun auch wissen ...Hallo,
super damit ist das Problem ja geloest. Es stimmt die
Dokumentation schweigt sich darüber aus, das
:HitTop/Bottomblock nur bei einem ::ForceStable()
durch ::ForceStable() die jeweiligen Codeblöcke
evaluiert werden.
Wir werden dies entsprechend korrigieren, besten
Dank hierfür.
Mit besten Grüßen aus Eschborn,
Steffen F. Pirsig
Alaska Software