Tbrowse:hitbottom equivalent in XbpBrowse ?

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Tbrowse:hitbottom equivalent in XbpBrowse ?

Beitrag von AUGE_OHR »

hi,

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
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Beitrag von AUGE_OHR »

hi,

hat keiner eine Antwort ?
benutzt den irgend jemand XbpBrowse:HitBottomBlock ?

was will ich eigendlich :

naja wenn ich im Browse einen Datensatz "markiere" soll er
danach die Anzeige auf den nächsten Datensatz mit oBrowse:down()
setzten damit man gleich weiter markieren kann .... bis zum "Ende"
= EOF().

warum benutze ich o:down() und nicht SKIP ?

nach einem SKIP muss ich ein refreshAll() machen, weil refreshCurrent()
mir eine leere (?) Anzeige gibt (kein Index, Scope oder Filter).
Da durch wird der "aktuelle" Datensatz immer in der 1st Zeile angezeigt.

achso nochwas : wenn ich o:down() z.b. auf einen Pushbutton lege und
damit auslöse funktioniert es, aber nicht in einer DO WHILE !EOF().

hier nochmal der code, vielleicht hat jemand eine andere Idee ?

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 ***
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi Jimmy,

ist schon ne Weile her und viel Erfahrung habe ich nicht mit dem Browser, 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. 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.

Schau doch in den Beispielen nach dort müsste es Beispiele mit korrekt belegten Code-Blöcken geben.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Beitrag von AUGE_OHR »

hi,
brandelh 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.
yup, den der DBSkipper setzt ihn "zurück" wenn er EOF/BOF erreicht
hat.
brandelh 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.
geht dann auch nur mit :refreshAll() womit dann auch alles in die
1st Zeile rutscht.
brandelh hat geschrieben: Schau doch in den Beispielen nach dort müsste es Beispiele mit korrekt belegten Code-Blöcken geben.
genau das war mein Problem, ich habe nix gefunden weder in Help
File, Sample und in den Alaska Newsgroups ...

Nun hab ich aber eine Msg von Diego bekommen und es ist mir ein
Licht aufgegangen (Unterschied zu Cl*pper) :

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
Es "scheint" so als wenn o:hitBottomBlock nur dann evaluiert wird
wenn "o:Stable" (= forceStable() ) ist !!!

gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Ah, das macht Sinn...
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Beitrag von AUGE_OHR »

hi,

so hier die Lösung des Puzzle :
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
tja toll das wir das nun auch wissen ...

gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21199
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Jimmy,

ich finde Deinen Humor köstlich.... :lol:
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Antworten