home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a065 / 1.img / TBPRGS.EXE / TB13.PRG < prev    next >
Encoding:
Text File  |  1992-03-04  |  3.1 KB  |  116 lines

  1.     // Tb13.prg
  2.     //
  3.     // Tbrowse code demonstrating how to use a for and a while clause -
  4.     // generic version. Uses generic database skipBlock function
  5.  
  6.     // Compile with /a /m /n /w
  7.     // Link with tbutils, tb07, dict
  8.  
  9.     #include "Inkey.ch"
  10.     #include "Tbutils.ch"
  11.  
  12.     MEMVAR getList
  13.  
  14.     FUNCTION Tb13
  15.     
  16.     FIELD Lname, Fname, AcBal IN Tbdbf1
  17.     LOCAL oTbr := TBrowseNew(1, 1, MaxRow() - 1, MaxCol() - 1), ;
  18.           lExitRequested := .F., nKey
  19.  
  20.     LOCAL bWhile
  21.     LOCAL bFor
  22.     LOCAL bFirst
  23.     LOCAL bLast
  24.     LOCAL cSearcher
  25.     LOCAL bNext
  26.     LOCAL bPrev
  27.  
  28.       USE Tbdbf1
  29.       IF !file("Tbdbf1.ntx")
  30.         INDEX ON upper(Lname + Fname) TO Tbdbf1
  31.       ELSE
  32.         SET INDEX TO Tbdbf1
  33.       ENDIF
  34.     
  35.       addAllFields(oTbr)
  36.       oTbr:insColumn(1, TBColumnNew("Rec #", {|| Recno() }))
  37.       oTbr:freeze := 1
  38.  
  39.       oTbr:goTopBlock    := {|| TBFwFirst(bFirst, bWhile, bFor) }
  40.     
  41.       oTbr:goBottomBlock := {|| TBFwLast(bLast, bWhile, bFor) }
  42.  
  43.       bNext := {|| TBFwGoNext(bFor, bWhile) }
  44.       bPrev := {|| TBFwGoPrev(bFor, bWhile) }
  45.     
  46.       oTbr:skipBlock := {|n| DbSkipBlock(n, bNext, bPrev) }
  47.  
  48. // tb12 uses this ...
  49. //      oTbr:skipBlock     := {|n| TBFwSkip(n, bWhile, bFor) }
  50.  
  51.       // Browse entire database
  52.       CLEAR SCREEN
  53.       @ 0, 0 TO MaxRow(), MaxCol()
  54.       bFirst := {|| DbGoTop()    }
  55.       bLast  := {|| DbGoBottom() }
  56.       bFor   := {|| .T. }
  57.       bWhile := {|| .T. }
  58.       oTbr:goTop()
  59.       IF !Eval(bWhile)
  60.         Alert("No matching records", {"OK"})
  61.         MyBrowse2(oTbr)
  62.       ELSE
  63.         MyBrowse2(oTbr)
  64.       ENDIF
  65.  
  66.       // Browse records WHILE upper(Lname) = cSearcher
  67.       CLEAR SCREEN
  68.       cSearcher := Space(Len(Lname))
  69.       @ 10, 10 SAY "Enter searcher" GET cSearcher
  70.       READ
  71.       cSearcher := Trim(Upper(cSearcher))
  72.  
  73.       CLEAR SCREEN
  74.       @ 0, 0 TO MaxRow(), MaxCol()
  75.  
  76.       bWhile   := {|| Upper(Lname) = cSearcher }
  77.       bFor     := {|| .T. }
  78.       bFirst   := {|| DbSeek(cSearcher) }
  79.       bLast    := {|| DbSeek(INCLAST(cSearcher), .T.), DbSkip(-1) }
  80.       oTbr:goTop()
  81.  
  82.       IF !eval(bWhile)
  83.         Alert("No matching records", {"OK"})
  84.         MyBrowse2(oTbr)
  85.       ELSE
  86.         MyBrowse2(oTbr)
  87.       ENDIF
  88.  
  89.       // Browse records WHILE upper(Lname) >=  "S" .AND.
  90.       //                      upper(Lname) <= "T"
  91.       //                FOR   AcBal >= 0
  92.       CLEAR SCREEN
  93.       @ 0, 0 TO MaxRow(), MaxCol()
  94.       bWhile   := {|| upper(Lname) >=  "S" .AND. ;
  95.                       upper(Lname) <= "T" }
  96.       bFor     := {|| AcBal >= 0 }
  97.  
  98.       bFirst   := {|| DbSeek("S") }
  99.       bLast    := {|| DbSeek("U", .T.), DbSkip(-1) }
  100.       oTbr:goTop()
  101.       MyBrowse2(oTbr)
  102.  
  103.       // Browse records FOR upper(Lname) = "S" .OR. ;
  104.       //                    upper(Lname) = "T"
  105.       CLEAR SCREEN
  106.       @ 0, 0 TO MaxRow(), MaxCol()
  107.       bWhile   := {|| .T. }
  108.       bFor     := {|| Upper(Lname) = "S" .OR. ;
  109.                       Upper(Lname) = "T" }
  110.       bFirst   := {|| DbGoTop() }
  111.       bLast    := {|| DbGoBottom() }
  112.       oTbr:goTop()
  113.       MyBrowse2(oTbr)
  114.  
  115.     RETURN NIL
  116.