home *** CD-ROM | disk | FTP | other *** search
/ Shareware Supreme Volume 6 #1 / swsii.zip / swsii / 450 / S9305.ZIP / SPENCE.ZIP / DBTEST.PRG < prev    next >
Encoding:
Text File  |  1993-03-02  |  5.2 KB  |  205 lines

  1. // DbTest.prg
  2. //
  3. // Tbrowse code demonstrating how to use TBrowseFW().
  4.  
  5. // You can use this code with either the Class(y), SuperClass,
  6. // or simulated versions of the filtered database browser sub-class.
  7. // To use the simulated version, you must include the header
  8. // file which includes the #translates to convert the simulated
  9. // instance variable references into elements of the cargo array.
  10. // Do this by compling this program as follows:
  11. //
  12. //   Clipper DbTest /a /m /n /w /dSIMUL
  13.  
  14. #include "Inkey.ch"
  15.  
  16. #define INCLAST(c) Substr(c, 1, Len(c) - 1) + ;
  17.                    Chr( Asc( Substr( c, Len(c) ) ) + 1)
  18.  
  19. #define MOVE_UP_KEY(nKey) chr(nKey) $ ;
  20.          (chr(K_UP) + chr(K_PGUP) + chr(K_CTRL_PGUP))
  21.  
  22. // NOTE - include header file containing #translates if simulated
  23. // version.
  24.  
  25. #ifdef SIMUL
  26.   #include "Dbrowser.ch"
  27. #endif
  28.  
  29. FUNCTION Test1
  30.  
  31. FIELD Lname, Fname, AcBal IN TbDbf1
  32.  
  33. LOCAL oTbr
  34. LOCAL bWhile, bFor, bFirst, bLast
  35. LOCAL cSearcher
  36. LOCAL GetList := {}
  37.  
  38.   USE Tbdbf1 NEW
  39.   IF !file("Tbdbf1.ntx")
  40.     INDEX ON upper(Lname + Fname) TO Tbdbf1
  41.   ELSE
  42.     SET INDEX TO Tbdbf1
  43.   ENDIF
  44.  
  45.   // Browse entire database
  46.   bFirst := {|| DbGoTop()    }
  47.   bLast  := {|| DbGoBottom() }
  48.   bFor   := {|| .T. }
  49.   bWhile := {|| .T. }
  50.   oTbr   := TBrowseFW(bWhile, bFor, bFirst, bLast)
  51.   MyBrowse(oTbr)
  52.  
  53.  
  54.   // Browse records WHILE upper(Lname) = cSearcher
  55.   CLEAR SCREEN
  56.   cSearcher := Space(Len(Lname))
  57.   @ 10, 10 SAY "Enter searcher" GET cSearcher
  58.   READ
  59.   cSearcher := Trim(Upper(cSearcher))
  60.  
  61.   bWhile   := {|| Upper(Lname) = cSearcher }
  62.   bFor     := {|| .T. }
  63.   bFirst   := {|| DbSeek(cSearcher) }
  64.   bLast    := {|| DbSeek(INCLAST(cSearcher), .T.), DbSkip(-1) }
  65.   oTbr     := TBrowseFW(bWhile, bFor, bFirst, bLast)
  66.   MyBrowse(oTbr)
  67.  
  68.  
  69.   // Browse records WHILE upper(Lname) >=  "S" .AND.
  70.   //                      upper(Lname) <= "T"
  71.   //                FOR   AcBal >= 0
  72.   bWhile   := {|| upper(Lname) >=  "S" .AND. ;
  73.                   upper(Lname) <= "T" }
  74.   bFor     := {|| AcBal >= 0 }
  75.   bFirst   := {|| DbSeek("S") }
  76.   bLast    := {|| DbSeek("U", .T.), DbSkip(-1) }
  77.   oTbr     := TBrowseFW(bWhile, bFor, bFirst, bLast)
  78.   MyBrowse(oTbr)
  79.  
  80.  
  81.   // Browse records FOR upper(Lname) = "S" .OR. ;
  82.   //                    upper(Lname) = "T"
  83.   bWhile   := {|| .T. }
  84.   bFor     := {|| Upper(Lname) = "S" .OR. ;
  85.                   Upper(Lname) = "T" }
  86.   bFirst   := {|| DbGoTop() }
  87.   bLast    := {|| DbGoBottom() }
  88.   oTbr := TBrowseFW(bWhile, bFor, bFirst, bLast)
  89.   MyBrowse(oTbr)
  90.  
  91.   CLEAR SCREEN
  92.  
  93. RETURN NIL
  94.  
  95.  
  96. FUNCTION MyBrowse(oTbr)
  97.  
  98. LOCAL lExitRequested := .F.
  99. LOCAL nKey
  100.  
  101.   CLEAR SCREEN
  102.   @ 0, 0 TO MaxRow(), MaxCol()
  103.   oTbr:goTop()
  104.   IF Eof()
  105.     Alert("No Matching Records")
  106.   ENDIF
  107.  
  108.   oTbr:nTop    := 1
  109.   oTbr:nLeft   := 1
  110.   oTbr:nBottom := MaxRow() - 1
  111.   oTbr:nRight  := MaxCol() - 1
  112.  
  113.   addAllFields(oTbr)
  114.   oTbr:insColumn(1, TBColumnNew("Rec #", {|| Recno() }))
  115.   oTbr:freeze := 1
  116.  
  117.  
  118.   DO WHILE !lExitRequested
  119.     DO WHILE !oTbr:stabilize()
  120.     ENDDO
  121.     IF oTbr:hitBottom .AND. !oTbr:appendMode .AND. ;
  122.        Alert("Add Record", {"Yes", "No"}) = 1
  123.        oTbr:appendMode := .T.
  124.        oTbr:goBottom()
  125.        DO WHILE !oTbr:stabilize()
  126.        ENDDO
  127.     ELSEIF (Eof() .OR. LastRec() = 0) .AND. !oTbr:appendMode
  128.       // No records in database or none matching scope
  129.       IF Alert("Add record", {"Yes", "No"}) = 1
  130.         oTbr:appendMode := .T.
  131.         oTbr:down()
  132.         DO WHILE !oTbr:Stabilize()
  133.         ENDDO
  134.       ELSE
  135.         lExitRequested := .T.
  136.       ENDIF
  137.     ENDIF
  138.  
  139.     IF !lExitRequested
  140.       nKey := InKey(0)
  141.       IF nKey == K_ESC
  142.         IF oTbr:appendMode
  143.           oTbr:appendMode := .F.
  144.           oTbr:refreshAll()
  145.         ELSE
  146.           lExitRequested := .T.
  147.         ENDIF
  148.       ELSEIF nKey == K_INS
  149.         IF Alert("Add Record", {"Yes", "No"}) = 1
  150.           oTbr:appendMode := .T.
  151.           oTbr:goBottom()
  152.         ENDIF
  153.       ELSE
  154.         IF StdMeth(nKey, oTbr)
  155.           IF MOVE_UP_KEY(nKey) .AND. oTbr:appendMode .AND. LastRec() != 0
  156.             oTbr:appendMode := .F.
  157.             oTbr:refreshAll()
  158.           ENDIF
  159.         ENDIF
  160.       ENDIF
  161.     ENDIF
  162.   ENDDO
  163.  
  164. RETURN NIL
  165.  
  166.  
  167. FUNCTION StdMeth(nKey, oTbr)
  168.  
  169. LOCAL lKeyHandled := .T.
  170.  
  171.   DO CASE
  172.     CASE nKey == K_DOWN;       oTbr:down()
  173.     CASE nKey == K_UP;         oTbr:up()
  174.     CASE nKey == K_PGDN;       oTbr:pageDown()
  175.     CASE nKey == K_PGUP;       oTbr:pageUp()
  176.     CASE nKey == K_CTRL_PGUP;  oTbr:goTop()
  177.     CASE nKey == K_CTRL_PGDN;  oTbr:goBottom()
  178.     CASE nKey == K_RIGHT;      oTbr:right()
  179.     CASE nKey == K_LEFT;       oTbr:left()
  180.     CASE nKey == K_HOME;       oTbr:home()
  181.     CASE nKey == K_END;        oTbr:end()
  182.     CASE nKey == K_CTRL_LEFT;  oTbr:panLeft()
  183.     CASE nKey == K_CTRL_RIGHT; oTbr:panRight()
  184.     CASE nKey == K_CTRL_HOME;  oTbr:panHome()
  185.     CASE nKey == K_CTRL_END;   oTbr:panEnd()
  186.     OTHERWISE;                 lKeyHandled := .F.
  187.   ENDCASE
  188.  
  189. RETURN lKeyHandled
  190.  
  191.  
  192. FUNCTION AddAllFields(oTbr)
  193.     
  194. LOCAL oTbc, ;
  195.       nFieldNum, ;
  196.       nFields := fcount()
  197.     
  198.   FOR nFieldNum := 1 TO nFields
  199.     oTbc := TBColumnNew(field(nFieldNum), fieldblock(field(nFieldNum)))
  200.     oTbr:addColumn(oTbc)
  201.   NEXT
  202.     
  203. RETURN NIL
  204.  
  205.