home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a065 / 1.img / TBPRGS.EXE / TB10.PRG < prev    next >
Encoding:
Text File  |  1992-01-10  |  2.5 KB  |  127 lines

  1.     // Tb10.prg
  2.     //
  3.     // Tbrowse code demonstrating how to use a FOR clause
  4.     // Hard coded - AcBal > 0
  5.     //
  6.     // Link with tbutils, tb07
  7.  
  8.     #include "inkey.ch"
  9.  
  10.     FUNCTION Tb10
  11.  
  12.     FIELD Lname, Fname, AcBal IN TbDbf1
  13.  
  14.     LOCAL oTbr := tbrowseNew(1, 1, MaxRow() - 1, MaxCol() - 1), ;
  15.           lExitRequested := .F., nKey
  16.  
  17.       USE TbDbf1
  18.       IF !File("Tbdbf1.ntx")
  19.         INDEX ON upper(Lname + Fname) TO TbDbf1
  20.       ELSE
  21.         SET INDEX TO TbDbf1
  22.       ENDIF
  23.  
  24.       CLEAR SCREEN
  25.  
  26.       @ 0, 0 TO MaxRow(), MaxCol()
  27.  
  28.       AddAllFields(oTbr)
  29.       oTbr:insColumn(1, TBColumnNew("Rec #", {|| recno() }))
  30.       oTbr:freeze := 1
  31.       oTbr:goTopBlock    := {||  ForStart() }
  32.       oTbr:goBottomBlock := {||  ForEnd()   }
  33.       oTbr:skipBlock     := {|n| ForSkip(n) }
  34.  
  35.       oTbr:goTop()
  36.       IF AcBal <= 0
  37.         alert("No matching records", {"OK"})
  38.       ELSE
  39.         MyBrowse2(oTbr)
  40.       ENDIF
  41.  
  42.     RETURN NIL
  43.  
  44.   
  45.     // goTopBlock for hard coded for condition -
  46.     //   FOR AcBal > 0
  47.  
  48.     FUNCTION ForStart
  49.  
  50.     FIELD AcBal IN TbDbf1
  51.  
  52.       GOTO TOP
  53.       DO WHILE !Eof() .AND. AcBal <= 0
  54.         SKIP
  55.       ENDDO
  56.  
  57.       // Already at Eof() if AcBal <= 0
  58.  
  59.     RETURN NIL
  60.  
  61.  
  62.     // goBottomBlock for hard coded for condition -
  63.     //   FOR AcBal > 0
  64.  
  65.     FUNCTION ForEnd
  66.  
  67.     FIELD AcBal IN TbDbf1
  68.  
  69.       GOTO BOTTOM
  70.       DO WHILE !Bof() .AND. AcBal <= 0
  71.         SKIP -1
  72.       ENDDO
  73.  
  74.       IF Bof()
  75.         // no records match filter
  76.         GOTO 0
  77.       ENDIF
  78.  
  79.     RETURN NIL
  80.  
  81.  
  82.     // skipBlock for hard coded for condition -
  83.     //   FOR AcBal > 0
  84.  
  85.     FUNCTION ForSkip(nToSkip)
  86.  
  87.     FIELD AcBal IN TbDbf1
  88.     LOCAL nSkipped := 0, ;
  89.           nLastValidRecNum := Recno()
  90.  
  91.       IF nToSkip == 0
  92.         SKIP 0
  93.         RETURN 0
  94.       ENDIF
  95.  
  96.       IF nToSkip > 0
  97.         DO WHILE nSkipped < nToSkip .AND. !Eof()
  98.           SKIP
  99.           DO WHILE AcBal <= 0 .AND. !Eof()
  100.             SKIP
  101.           ENDDO
  102.           IF AcBal > 0
  103.             nSkipped++
  104.             nLastValidRecNum := Recno()
  105.           ENDIF
  106.         ENDDO
  107.         IF Eof()
  108.           GOTO nLastValidRecNum
  109.         ENDIF
  110.       ELSE
  111.         DO WHILE nSkipped > nToSkip .AND. !Bof()
  112.           SKIP -1
  113.           DO WHILE AcBal <= 0 .AND. !Bof()
  114.             SKIP -1
  115.           ENDDO
  116.           IF AcBal > 0
  117.             nSkipped--
  118.             nLastValidRecNum := Recno()
  119.           ENDIF
  120.         ENDDO
  121.         IF Bof()
  122.           GOTO nLastValidecNum
  123.         ENDIF
  124.       ENDIF
  125.  
  126.     RETURN nSkipped
  127.