home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / database / rbnotes2.zip / EDTORIAL.12 < prev    next >
Text File  |  1986-04-08  |  32KB  |  1,329 lines

  1. MICRORIM TECHNICAL NOTE
  2. ________________________________________________________
  3. BROWSING WITHOUT CHANGING
  4.  
  5. DATE      :  03/86                   NUMBER       :  EX-3-1
  6. PRODUCT   :  R5K                     VERSIONS     :  1.01
  7. CATEGORY  :  BROWSE                  SUBCATEGORY  :  NO CHANGES/VIEW ONLY
  8.  
  9. ________________________________________________________
  10.  
  11. DESCRIPTION:   I want to be able to browse through my database both
  12. forward and backward without changing any of the data.
  13.  
  14.  
  15.  
  16.  
  17. SOLUTION:   Here are two methods you can use to browse through your
  18. data without changing the original data.  Method one uses the EDIT ALL
  19. command with a modify password.  Method two uses report formats and
  20. displays one row at a time on the screen.  All macros and command
  21. files should be put on your database directory with your database.
  22.  
  23. METHOD ONE - MODIFY PASSWORD
  24.  
  25. The EDIT ALL command in R:base allows easy browsing both forward and
  26. backward in your table without using a form.  In addition, the EDIT
  27. ALL command allows you to view several rows of data at one time and to
  28. scroll to the right and left as well as up and down.  To prevent
  29. inadvertant changes to your data, put a modify password (MPW) on all
  30. tables that you want to be able to browse through without changing.
  31. Then, when you want to actually make changes to the table, enter the
  32. modify password with the USER command.  After making your changes, use
  33. the USER command again to change the current system password to
  34. something other than the modify password.
  35.  
  36. For example, the following code will put a modify password of GOFORIT
  37. on a table named CLIENTS in a database named MYDB where the OWNER
  38. password is SMITH:
  39.  
  40. DEFINE MYDB
  41. OWNER SMITH
  42. PASSWORDS
  43. MPW FOR CLIENTS IS GOFORIT
  44. END
  45.  
  46. After defining the passwords for the first time, you will need to exit
  47. from R:base and then reload R:base before the passwords will be
  48. effective.
  49.  
  50. Finally, use the following code anytime you want to browse or make
  51. changes to the table CLIENTS:
  52.  
  53. FILLIN CHOICE USING +
  54. "Enter B to browse through CLIENTS or enter C to make a change to
  55. CLIENTS: "
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67. IF CHOICE = B THEN
  68.   USER NONE
  69.   EDIT ALL FROM CLIENTS
  70. ENDIF
  71. IF CHOICE = C THEN
  72.   USER GOFORIT
  73.   EDIT ALL FROM CLIENTS
  74.   USER NONE
  75. ENDIF
  76.  
  77. Be sure to set up an OWNER password before setting up modify passwords
  78. and take care to keep a record of what your owner password is.  If you
  79. lose your OWNER password, you will no longer be able to add or change
  80. passwords nor will you be able to modify your database structure.
  81.  
  82. METHOD TWO - REPORTS
  83.  
  84. This method will allow you to browse through your data one row at a
  85. time.  First,  Make a report that looks exactly like your form.  See
  86. MICRORIM TECHNICAL NOTE NUMBER EX-3-6 (CATEGORY: REPORTS and
  87. SUBCATEGORY: FROM FORMS) in this March 1986 set for a macro that will
  88. quickly convert your table form to an identical report format.
  89.  
  90. Now when you want to browse through your data, form by form, issue the
  91. following command to print the report to the screen:
  92.  
  93. PRINT repname
  94.  
  95. If you want only certain records displayed, put a WHERE clause on the
  96. PRINT command line.
  97.  
  98. GOING FORWARD AND BACKWARD
  99.  
  100. If you want to browse both forward and backward quickly, you will need
  101. a ROWNUM column in your table.  Make sure the ROWNUM column contains
  102. unique consecutive row numbers and that it is a keyed column for fast
  103. access.  In other words, your row numbers should not have gaps; if you
  104. have a row number three, there should be a two and a one.  If there is
  105. a missing number, the macro LOOKONLY.MAC (listed below) will print the
  106. message, "WARNING, NO ROWS SATISFY THE WHERE CLAUSE".
  107.  
  108. For an automatic row numbering routine, see page 10 of the November
  109. 1985 R:base EXCHANGE.
  110.  
  111. To run the following macro, issue the following command:
  112.  
  113. RUN LOOKONLY.MAC
  114.  
  115. *( LOOKONLY.MAC - a macro that will allow browsing forward and
  116. backward, one
  117.    form {or row} at a time, without allowing changes to the data)
  118. SET VAR NEXTROW TO N
  119. SET VAR START INTEGER
  120. FILLIN START USING "Enter the starting row number or +
  121. press [ENTER] for the beginning: "
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134. *( If the operator presses [ENTER] we start at the beginning )
  135. IF START FAILS THEN
  136.   SET VAR START TO 1
  137. ENDIF
  138.  
  139. COMPUTE TOTROWS AS ROWS FROM tblname
  140. SET VAR TOTROWS TO .TOTROWS + 1
  141.  
  142. *( This loop prints the records on the screen )
  143. WHILE NEXTROW NE Q OR START NE 0 OR START NE .TOTROWS THEN
  144.   PRINT repname WHERE ROWNUM = .START
  145.   FILLIN NEXTROW USING +
  146.   "Enter N for the next row, P for the previous row, or Q to quit: "
  147.  
  148. *( Add 1 to see the {N}ext row, subtract 1 to see the {P}revious row)
  149.   GOTO .NEXTROW
  150.  
  151.     LABEL N
  152.       SET VAR START TO .START + 1
  153.     GOTO THEEND
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.     LABEL P
  200.       SET VAR START TO .START - 1
  201.     GOTO THEEND
  202.  
  203.     LABEL Q
  204.       QUIT
  205.  
  206.     LABEL .NEXTROW
  207.  
  208.     LABEL THEEND
  209. ENDWHILE
  210.  
  211. In the above code the line:
  212.  
  213. LABEL .NEXTROW
  214.  
  215. is necessary to protect against an operator entering something other
  216. than a P, N, or Q.  If you omit this line of code and an operator
  217. enters an M instead of an N, the LOOKONLY.MAC program will go into an
  218. infinite loop looking for a label that does not exist.  To the
  219. operator the computer will appear to be hanging.
  220.  
  221. Also, take a look at the WHILE... command line.  Control will pass out
  222. of the WHILE loop if:
  223.  
  224.   o  The operator presses Q to quit (NEXTROW = Q).
  225.   o  The operator is on the first row and presses P for the previous
  226.   row (START = 0).
  227.   o  The operator is on the last row and presses N for the next row
  228.   (START = .NEXTROW).
  229.  
  230. If you do not want to add a ROWNUM column to your table, change the
  231. PRINT command line in the above listing of LOOKONLY.MAC to read:
  232.  
  233. PRINT repname WHERE COUNT = .START
  234.  
  235. This will use a built-in feature of R:base, but will not be as fast if
  236. you are working with a large table of data.
  237.  
  238. You may want to modify LOOKONLY.MAC to better meet your exact needs.
  239. You could, for example, ask the operator how many rows to go back or
  240. put in a menu with options such as 10 rows back, 20 rows back, 10 rows
  241. forward, etc.  You can make many interesting modifications.  To
  242. increase execution speed, GOTOs and LABELs are used instead of stacked
  243. IF blocks.
  244.  
  245.  
  246.  
  247.  
  248.  
  249. MICRORIM TECHNICAL NOTE
  250. ________________________________________________________
  251.  
  252. MORE THAN 10 CONDITIONS IN A RULE
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265. DATE      :  03/86                   NUMBER       :  EX-3-2
  266. PRODUCT   :  R5K & R4K               VERSIONS     :  4K 1.15 & 5K 1.01
  267. CATEGORY  :  RULES                   SUBCATEGORY  :  CONDITIONS
  268.  
  269. ________________________________________________________
  270.  
  271. DESCRIPTION:   I need more than 10 conditions in my RULE.  I know I
  272. could set up a table with all needed conditions and then check that
  273. table but I would rather be able to put the conditions directly into
  274. the RULE.
  275.  
  276.  
  277.  
  278.  
  279. EXPLANATION:   To understand how to create more than 10 conditions in
  280. a single rule, it is necessary to understand how R:base stores rules.
  281.  
  282. All rules are stored as data in the RULES table in R:base 5000 or in
  283. the RBSRULES table in R:base 4000.  If you have R:base 4000,
  284. substitute the table name RBSRULES for RULES throughout this technical
  285. note.
  286.  
  287. Each condition of a rule is stored in a separate row of the table, and
  288. conditions are separated by either an AND or an OR.  The columns in
  289. the RULES/RBSRULES table are described below.
  290.  
  291. NUMRULE (INTEGER): number of the rule
  292.  
  293. AND/OR (TEXT):     contains AND if this is the first condition of the
  294.                    rule, either AND or OR for subsequent conditions
  295.                    (depending on how you separated them).  If this is
  296.                    the last row(s) of the rule, this column contains
  297.                    the word USES
  298.  
  299. COLNAME1 (TEXT):   contains the name of the column that this condition
  300.                    of the rule checks.
  301.  
  302. TABLE1  (TEXT):    This column is blank except on the row(s) where the
  303.                    AND/OR column contains the word USES.  In that
  304.                    case, TABLE1 contains the name of the table that
  305.                    COLNAME1 is in.  If COLNAME1 is in more than one
  306.                    table, there will be a row for every table name.
  307.  
  308. BOOLEAN (TEXT):    contains the operator for the rule:
  309.                    = or EQ  : column1 equals a value
  310.                    < or LT  : column1 less than a value
  311.                    > or GT  : column1 greater than a value
  312.                    <> or NE : column1 not equal to a value
  313.                    <= or LE : column1 less than or equal to a value
  314.                    >= or GE : column1 greater than or equal to a value
  315.                    EQA      : column1 equals column2 in table2
  316.                    LTA      : column1 less than column2 in table2
  317.                    GTA      : column1 greater than column2 in table2
  318.                    NEA      : column1 not equal to column2 in table2
  319.                    LEA      : column1 less than or equal to
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.                               column2 in table2
  332.                    GEA      : column1 greater than or equal to
  333.                               column2 in table2
  334.                    EXIS     : column1 exists
  335.                    FAIL     : column1 fails (contains NULL)
  336.  
  337. COLNAME2 (TEXT):   contains the name of the second column of the
  338.                    comparison if BOOLEAN is EQA, NEA, LTA, GTA, GEA,
  339.                    or LEA.
  340.  
  341. TABLE2  (TEXT):    contains the name of the table that COLNAME2 is in.
  342.  
  343. RULVALUE (TEXT):   contains the value to compare COLNAME1 to if the
  344.                    comparison is =, <, >, <>, <= or >= (or their
  345.                    two-letter equivalents.)  If this is the last row
  346.                    of the rule and AND/OR contains the word USES, this
  347.                    column contains the error message text.
  348.  
  349. What follows is an example of how rules are parsed when entered in
  350. DEFINE mode:
  351.  
  352. Look at the following two table definitions:
  353.  
  354. Table: TAB1
  355. Column definitions:
  356. # Name  Type     Length
  357. 1 ID    Integer  1 value(s)
  358.  
  359. Table: TAB2
  360. Column definitions:
  361. # Name  Type     Length
  362. 1 ID    Integer  1 value(s)
  363. 2 NAME  Text     24
  364.  
  365. The following three rules are defined for this database:
  366.  
  367. "Bad ID" ID = 1 OR ID = 0
  368. "Dupe" ID IN TAB1 NEA ID IN TAB2
  369. "Bad Combo" NAME = DR AND ID LT 0
  370.  
  371. The RULES table for this example is shown below:
  372.  
  373. NUMRULE AND/OR COLNAME1 TABLE1 BOOLEAN COLNAME2 TABLE2 RULVALUE
  374. ------- ------ -------- ------ ------- -------- ------ --------
  375.    1     ANDS  ID               =                      1
  376.    1     OR    ID               =                      0
  377.    1     USES           TAB1                           Bad ID
  378.    1     USES           TAB2                           Bad ID
  379.    2     AND   ID       TAB1    NEA    ID       TAB2
  380.    2     USES           TAB1                           Dupe
  381.    3     AND   NAME             =                      DR
  382.    3     AND   ID               LT                     0
  383.    3     USES           TAB2                           Bad Combo
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409.  
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450.  
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463. SOLUTION:   R:base 4000 and R:base 5000 do not allow you to define
  464. more than 10 conditions in a single rule but you can work around this
  465. by manipulating the RULES table directly.  Using this method you may
  466. have as many conditions in a single rule as you need.  However, you
  467. need to be sure that your logic is correct.  The method presented here
  468. will work best if you have all ORs or all ANDs in your rule.  Mixing
  469. ANDs and ORs in a single rule can create computer logic problems.
  470.  
  471. While in DEFINE mode, R:base will only let you define 10 conditions
  472. for a rule.  However, you can manually load the RULES table with as
  473. many conditions as you want.  However, the rule to which you are
  474. adding conditions must be the physically last rule in the RULES table.
  475.  
  476. STEP ONE
  477.  
  478. Define the first 10 conditions of the rule using the DEFINE command.
  479.  
  480. STEP TWO
  481.  
  482. Exit DEFINE mode and project (into a temporary table) the row or rows
  483. for your rule containing the word "USES" in the AND/OR column.  Then
  484. delete the same row(s) from the RULES table.  For example, the
  485. following two command lines will work for rule number three above.
  486.  
  487. PROJECT TEMP FROM RULES USING ALL WHERE NUMRULE = 3 AND AND/OR = USES
  488. DELETE ROWS FROM RULES WHERE NUMRULE = 3 AND AND/OR = USES
  489.  
  490.  
  491. STEP THREE
  492.  
  493. You can now use LOAD RULES WITH PROMPTS to load the RULES table with
  494. as many conditions as you want.  Any unused columns in the RULES table
  495. must be filled with at least one space.  No NULL values can be in any
  496. of the columns of the RULES table.  You must actually enter the space
  497. into the column; simply setting NULL to a space with the SET NULL " "
  498. command will not work.
  499.  
  500. STEP FOUR
  501.  
  502. The last row of the rule must have "USES" in the AND/OR column and
  503. your error message in the RULVALUE column.  It must look exactly like
  504. the row(s) you deleted in STEP TWO above.  Because this last row is
  505. stored in the temporary table you projected, it is easy to reattach it
  506. by using the APPEND command:
  507.  
  508. APPEND TEMP TO RULES
  509.  
  510. By experimenting with various conditions, logical operators, etc., it
  511. is possible to define rules with as many conditions as you want.  One
  512. user has reported personally testing this method with 100 conditions.
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529. MICRORIM TECHNICAL NOTE
  530. ________________________________________________________
  531.  
  532. CREATING A FORMATTED FILE WIDER THAN 131
  533.  
  534. DATE      :  03/86                   NUMBER       :  EX-3-3
  535. PRODUCT   :  R5K                     VERSIONS     :  1.01
  536. CATEGORY  :  FILES                   SUBCATEGORY  :  FORMATTED
  537. FILES/SELECT
  538.  
  539. ________________________________________________________
  540.  
  541. DESCRIPTION:   I need a formatted ASCII file wider than 131 characters
  542. (the limit on the R:base 5000 report writer) to be able to load data
  543. coming from my R:base database into my mainframe computer.
  544.  
  545.  
  546.  
  547.  
  548. SOLUTION:   Using the SELECT command you can create a formatted ASCII
  549. file wider than 131 characters.  You can, in fact, go as wide as 256
  550. characters with this method.
  551.  
  552. The code listed below demonstrates how to create a formatted file
  553. named FORMFILE.DAT that is 250 characters wide.
  554.  
  555. SET ERROR MESSAGE OFF
  556. SET MESSAGE OFF
  557. SET ECHO OFF
  558.  
  559. *(Set lines to 0 so that the heading will print only once and will be
  560.   easy to remove)
  561. SET LINES 0
  562.  
  563. SET WIDTH 250
  564. OUTPUT FORMFILE.DAT
  565.  
  566. *(Print the selected columns, using the =w option to format the file.
  567.   Keep in mind that SELECT will always print one blank before printing
  568.   each column; for example, COL1 will begin printing in position two
  569.   and COL2 will begin printing in position 73.  Also remember that
  570.   TEXT datatypes are left justified and all other data types are right
  571.   justified.)
  572. SELECT COL1=70 COL2=20 COL3=70 COL4=16 COL5=70 FROM tblname
  573. OUTPUT SCREEN
  574.  
  575. After creating the file with the above code you may want to remove the
  576. first two lines of the file.  These two lines contain the heading
  577. produced by the SELECT command.  Use an editor or word processor under
  578. nonformat or nondocument mode.
  579.  
  580. To create a file wider than 256 characters or with a specialized
  581. format, use our Extended Report Writer (XRW).  XRW is available from
  582. your local software dealer.
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599. MICRORIM TECHNICAL NOTE
  600. ________________________________________________________
  601.  
  602. FORMS LAYOUT AND CHANGING THE PROMPT ORDER
  603.  
  604. DATE      :  03/86                   NUMBER       :  EX-3-4
  605. PRODUCT   :  R5K                     VERSIONS     :  1.01
  606. CATEGORY  :  FORMS                   SUBCATEGORY  :  LAYOUT & PROMPT
  607. ORDER
  608.  
  609. ________________________________________________________
  610.  
  611. DESCRIPTION:   How can I change the order, on a form, by which the
  612. operator is prompted to enter data?  Also, please explain the numbers
  613. in the forms layout section.
  614.  
  615.  
  616.  
  617.  
  618. EXPLANATION:   All forms are stored as data in a table named FORMS.
  619. The FORMS table has two columns, FNAME and FDATA.  FNAME contains the
  620. formname for a particular form.  All the rows for a particular form
  621. have the same FNAME value.  The first row for the form contains the
  622. name of the table (if a table form) in the FDATA column.  If the form
  623. is a variable form, the FDATA column in the first row will be blank.
  624. After the first row, the next group of rows for the variable or table
  625. form contain all the textual information associated with the form.
  626. Following these rows is the LAYOUT section for the form.  The LAYOUT
  627. section contains information about the locations of the columns or
  628. variables in the form.
  629.  
  630. Open your database and issue the command:
  631.  
  632. SELECT ALL FROM FORMS
  633.  
  634. Page down until you see the word LAYOUT in the right-hand column
  635. (FDATA column).  Immediately below the word LAYOUT you will see the
  636. column or variable names that are located on that form.
  637.  
  638. If this is a table form, you will see three numbers to the right of
  639. each column name listed under the word LAYOUT.  For example, here is
  640. the LAYOUT section of a table form named CALLNOTE.
  641.  
  642. CALLNOTE LAYOUT
  643. CALLNOTE CONTACT  13   8  24
  644. CALLNOTE SPOKEWIT 13  51  24
  645. CALLNOTE IDNO     12   8  10
  646.  
  647. Underneath the word LAYOUT are the column names CONTACT, SPOKEWIT, and
  648. IDNO.  The order in which they are listed determines the prompting
  649. order.  When entering or editing data using this form, the cursor will
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661. first go to CONTACT, then bounce to SPOKEWIT, and finally bounce to
  662. IDNO.
  663.  
  664. The three numbers next to each column name refer to the location of
  665. that particular column on the form.  The first is the starting line
  666. number of the S...E location.  The second is the starting position of
  667. the S...E on the line.  The third is the located length.  In the
  668. CALLNOTE form, the column SPOKEWIT is located on the 13th line of the
  669. screen beginning in the 51st position and it is 24 characters long
  670. (including the S, the E, and the 22 positions inbetween).
  671.  
  672. Variable forms have four numbers to the right of each of the variable
  673. names.  For example, the following is the LAYOUT section of a variable
  674. form named ONLINE:
  675.  
  676. ONLINE   LAYOUT
  677. ONLINE   REGDATE  10   3   8    4
  678. ONLINE   REGNO    10  22   7    1
  679. ONLINE   NAME     13   8  24  -24
  680. ONLINE   CO       14   8  30  -30
  681. ONLINE   CALLTIME  6  72   6    5
  682.  
  683. When entering or editing data using this ONLINE variable form, the
  684. curser will bounce from REGDATE to REGNO to NAME to CO and finally to
  685. CALLTIME each time the [ENTER] key is pressed.
  686.  
  687. With variable forms, there is a fourth number listed.  This fourth
  688. number is a code indicating the data type of the variable or, in the
  689. case of TEXT datatypes, it is the negative of the defined length of
  690. text variables.  Notice that only the TEXT datatype variables have a
  691. minus sign in this column.  The codes are as follows:
  692.  
  693.    1   INTEGER
  694.    2   REAL
  695.    4   DATE
  696.    5   TIME
  697.    6   DOLLAR
  698.   -n   TEXT (Where n is the
  699.              defined length of
  700.              the text variable)
  701.  
  702. In the ONLINE variable form above, the variable CALLTIME is located on
  703. the variable form beginning on line six, position 72.  Its located
  704. length is six positions and its datatype is TIME.  The location of the
  705. variable CO begins on line 14 in the eighth position.  The variable CO
  706. is defined as a TEXT datatype and both its located and defined lengths
  707. are 30.  Any easy way to remember which length is which is to remember
  708. that the positive number is the located length and the negative number
  709. is the defined length.
  710.  
  711. An important aside is that both the defined and located lengths should
  712. probably be the same.  If you want to change the defined length to
  713. match the located length, issue the following command:
  714.  
  715. EDIT ALL FROM FORMS +
  716.  
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727. WHERE FNAME = formname
  728.  
  729. Using the down arrow key find the LAYOUT section and the variable name
  730. beneath it.  Using the right arrow, move to the negative number and
  731. type over it to make it the negative of the number immediately to its
  732. left.  For example, if the negative number is -8 and the number to the
  733. left of it is 5, then move the cursor to the -8 and change it to -5.
  734.  
  735.  
  736.  
  737.  
  738. SOLUTION:   To change the bounce order of the cursor, you need to
  739. change the order of the lines listed in the LAYOUT section.  For
  740. example, to change the CALLNOTE table form to have the cursor go to
  741. IDNO first, then CONTACT, and finally SPOKEWIT, you need to make the
  742. list under LAYOUT look like this:
  743.  
  744. CALLNOTE LAYOUT
  745. CALLNOTE IDNO     12   8  10
  746. CALLNOTE CONTACT  13   8  24
  747. CALLNOTE SPOKEWIT 13  51  24
  748.  
  749. Notice that none of the numbers associated with a particular column
  750. name changed.  The only change is that the IDNO line is now on the top
  751. of the stack.
  752.  
  753. There are several different ways to accomplish this reordering:
  754.  
  755.   o  RUN a macro named REORDER.FM.  It is too long to include in this
  756.   Technical Note but, if you have a modem, you can download it from
  757.   the Microrim Electronic Bulletin Board.  You will find REORDER.FM in
  758.   the FILES section - R5KAPPS area.  If you do not have a modem, call
  759.   (206) 885-2000 and ask for the Customer Support INFO CENTER.  We
  760.   will mail you a listing.
  761.  
  762.   o  Using the FORMS command, delete all the current locations, and
  763.   then locate them again in the order you want.  This method is the
  764.   easiest to understand but takes a long time.
  765.  
  766.  
  767.  
  768.  
  769.  
  770.  
  771.  
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.   o  If you do not have quotes in your form, issue the following
  794.   commands after backing up the database:
  795.  
  796.  
  797.  
  798.  
  799.  
  800.  
  801.  
  802.  
  803.  
  804.  
  805.  
  806.  
  807.  
  808.  
  809.  
  810.  
  811.  
  812.  
  813.  
  814.  
  815.  
  816.  
  817.  
  818.  
  819.  
  820.  
  821.  
  822.  
  823.  
  824.  
  825.  
  826.  
  827.  
  828.  
  829.  
  830.  
  831.  
  832.  
  833.  
  834.  
  835.  
  836.  
  837.  
  838.  
  839.  
  840.  
  841.  
  842.  
  843.  
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859. SET NULL -0-
  860. OUTPUT TEMP.DAT
  861. UNLOAD DATA FOR FORMS +
  862. WHERE FNAME = formname
  863. OUTPUT TERMINAL
  864. DELETE ROWS FROM FORMS +
  865. WHERE FNAME = formname
  866.  
  867.  
  868. If you do have quotes in the edited text of your form, you will need
  869. to choose a character that is not in your form such as the circumflex
  870. (^) and issue the following command prior to running the above code:
  871.  
  872. SET QUOTES=^
  873.  
  874. Now use a word processor under nondocument or nonformat mode to
  875. reorder the list in the TEMP.DAT file.  Do not change any of the
  876. numbers associated with each name.  What you need to do is change the
  877. position of the entire line in the list.  Take care that you move the
  878. entire line, not just the names.
  879.  
  880. When you are done, use the code below to put your form back in the
  881. FORMS table.  Omit the top and bottom lines if you did not unload with
  882. quotes set to the circumflex.
  883.  
  884. SET QUOTES=^
  885. SET NULL -0-
  886. INPUT TEMP.DAT
  887. SET QUOTES="
  888.  
  889.  
  890.  
  891.  
  892.  
  893.  
  894. MICRORIM TECHNICAL NOTE
  895. ________________________________________________________
  896.  
  897. BLINKING VARIABLES
  898.  
  899. DATE      :  03/86                   NUMBER       :  EX-3-5
  900. PRODUCT   :  R5K                     VERSIONS     :  1.01
  901. CATEGORY  :  VARIABLE                CATEGORY     :  SCREEN BLINKING
  902.  
  903. ________________________________________________________
  904.  
  905. DESCRIPTION:   After prompting the operator to enter information on
  906. the screen by using a FILLIN command, I want to write a message on the
  907. screen that includes the value just entered and I want that value to
  908. blink on and off to draw the operator's attention.
  909.  
  910.  
  911.  
  912.  
  913. SOLUTION:   You can have the value of the variable blink on the screen
  914.  
  915.  
  916.  
  917.  
  918.  
  919.  
  920.  
  921.  
  922.  
  923.  
  924.  
  925. as many times as you want by putting your WRITE and SHOW VAR commands
  926. inside a WHILE loop.
  927.  
  928. For example, the following code asks for an ID number to delete and
  929. then asks the operator if that is the correct number to delete.  The
  930. value of the variable holding the ID will blink on and off nine times
  931. to draw the operator's attention to the value.  Note that this example
  932. assumes that the ID# is three characters wide and so five blank spaces
  933. are inserted between Is and the on the WRITE... command line.
  934.  
  935. *(BLINK.CMD)
  936. NEWPAGE
  937. FILLIN VID USING "Enter ID# to delete: " at 5,10
  938. SET VAR BLINKNUM TO 0
  939. WHILE BLINKNUM LT 10 THEN
  940.   WRITE "Is     the ID# you want to delete? (Y/N) " AT 7,10
  941.   SHOW VAR VID=3 AT 7,13
  942.   SET VAR BLINKNUM TO .BLINKNUM + 1
  943. ENDWHILE
  944. FILLIN ANSWER USING "" AT 7,51
  945.  
  946. *( If it is the correct number, delete it )
  947. IF ANSWER = Y THEN
  948.   DELETE ROW FROM tblname WHERE ID# = .VID
  949. ENDIF
  950.  
  951. Notice that the reason why the variable's value blinks on and off is
  952. because each time the WRITE command is executed, it blanks out the
  953. value of the variable momentarily.  You could have the entire line
  954. blink by putting the following command as the first command in the
  955. WHILE loop:
  956.  
  957. WRITE "                                           " AT 7,10
  958.  
  959.  
  960.  
  961.  
  962.  
  963.  
  964. MICRORIM TECHNICAL NOTE
  965. ________________________________________________________
  966.  
  967. CONVERTING TABLE FORMS TO REPORTS
  968.  
  969. DATE      :  03/86                   NUMBER       :  EX-3-6
  970. PRODUCT   :  R5K                     VERSIONS     :  1.01
  971. CATEGORY  :  REPORTS                 SUBCATEGORY  :  FROM FORMS
  972.  
  973. ________________________________________________________
  974.  
  975. DESCRIPTION:   I have developed a fancy table form using the R:base
  976. FORMS command.  It took a lot of effort to put in the fancy boxes and
  977. to locate all the columns.  Now I want a report that looks just like
  978. it; is there an easy way to copy my form into a report?
  979.  
  980.  
  981.  
  982.  
  983.  
  984.  
  985.  
  986.  
  987.  
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994. EXPLANATION:   The FORMS and REPORTS tables are laid out differently
  995. so it is necessary to run a conversion routine to convert your FORMS
  996. to REPORTS.  The macro FORM2REP.MAC presented below will take your
  997. form and make a report that matches it exactly.
  998.  
  999. FORM2REP.MAC requires that the REPORTS table already exists and that
  1000. your original form is a maximum of 79 character positions wide.  If
  1001. there is anything in character position 80 of your form, FORM2REP.MAC
  1002. will cause a blank line to be inserted into your report.
  1003.  
  1004. If your form has fancy boxes and you want to print the report to the
  1005. printer instead of the screen, you may need to modify the report to
  1006. remove the fancy box lines and put in other characters that your
  1007. printer can recognize such as the dash, the asterisk, or the
  1008. underline.  Some printers are smart enough to recognize the fancy
  1009. boxes that you entered in your form by using the [ALT] key, but most
  1010. of the less expensive printers will not.
  1011.  
  1012. Run the macro listed in the SOLUTION below without modification.  It
  1013. is critical that the layout portions of both the forms and reports
  1014. match the layout that R:base expects.
  1015.  
  1016. You can use your new report format for the following purposes:
  1017.  
  1018.   o  To print blank forms, to be used as source documents.  You can
  1019.   use the following code after replacing the word tblname with the
  1020.   actual name of the table associated with your form and the word
  1021.   repname with the actual name of your report:
  1022.  
  1023. SET NULL -0-
  1024. LOAD tblname
  1025. FILL
  1026. -0-
  1027. END
  1028. SET NULL "  "
  1029. PRINT repname WHERE COUNT = LAST
  1030. SET NULL -0-
  1031. DELETE ROW FROM tblname WHERE COUNT = LAST
  1032.  
  1033.  
  1034.  
  1035.  
  1036.  
  1037.  
  1038.  
  1039.  
  1040.  
  1041.  
  1042.  
  1043.  
  1044.  
  1045.  
  1046.  
  1047.  
  1048.  
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.   o  To browse through your data without fear of accidently changing
  1058.   it.  See technical note EX-3-1 Browsing Without Changing (category:
  1059.   BROWSE - subcategory: NO CHANGES/VIEW ONLY) for details.
  1060.  
  1061.   o  To easily print hard copies or a file listing of all your records
  1062.   with one record per form.  These listings may be used to meet
  1063.   archival, backup & recovery, and audit trail requirements.
  1064.  
  1065.  
  1066.  
  1067.  
  1068. SOLUTION:
  1069.  
  1070.  
  1071. *( FORM2REP.MAC )
  1072. *( A macro that copies a form to a report format )
  1073.  
  1074. CLEAR ALL VARIABLE
  1075. SET MESSAGE OFF
  1076. SET ERROR MESSAGE OFF
  1077. NEWPAGE
  1078. LIST FORMS
  1079. SET VAR VFNAME TEXT
  1080. FILLIN VFNAME USING +
  1081. "Enter the name of the form to convert or press [ENTER] to quit: "
  1082. IF VFNAME FAILS THEN
  1083.   QUIT
  1084. ENDIF
  1085.  
  1086. *( See if the report already exists )
  1087. SET POINTER #3 S3 FOR REPORTS WHERE RNAME = .VFNAME
  1088. IF S3 EQ 0 THEN
  1089.   WRITE "A report with the same name already exists"
  1090.   WRITE "Press any key to quit"
  1091.   PAUSE
  1092.   QUIT
  1093. ENDIF
  1094. SET CLEAR OFF
  1095.  
  1096. *( Cycle through the form moving data to the report )
  1097. SET POINTER #2 S2 FOR FORMS WHERE FNAME = .VFNAME
  1098. SET VAR TEMP TEXT
  1099. SET VAR COUNTER TO 0
  1100. SET VAR LAY TO NO
  1101. WHILE S2 EQ 0 THEN
  1102.   SET VAR VFDATA TO FDATA IN #2
  1103.   WRITE .VFDATA  *( Show the user it is processing )
  1104.   SET VAR COUNTER TO .COUNTER + 1
  1105.   IF COUNTER EQ 1 THEN
  1106.     *( Note that there are five spaces between the PAGESIZE and the 1
  1107. on the
  1108.        third line following this comment.  These spaces are important
  1109. and
  1110.        must be there )
  1111.     LOAD REPORTS
  1112.  
  1113.  
  1114.  
  1115.  
  1116.  
  1117.  
  1118.  
  1119.  
  1120.  
  1121.  
  1122.  
  1123.       .VFNAME .VFDATA
  1124.       .VFNAME "PAGESIZE     1"
  1125.       .VFNAME  VARIABLE
  1126.       .VFNAME  DETAIL
  1127.     END
  1128.   ENDIF
  1129.   IF COUNTER GT 1 THEN
  1130.     IF LAY EQ YES THEN
  1131.       *( Note: The line following this comment has five spaces between
  1132. the
  1133.          open quote and the 1, five spaces between the 1 and the 0 and
  1134. five
  1135.          spaces between the two 0s.  These spaces are important and
  1136. must be
  1137.          there )
  1138.       SET VAR TEMP TO .VFDATA + "     1     0     0"
  1139.       LOAD REPORTS
  1140.         .VFNAME .TEMP
  1141.       END
  1142.     ENDIF
  1143.     IF VFDATA EQ LAYOUT THEN
  1144.        *( Note that there are two spaces following the word FLAG on
  1145. the
  1146.           second line following this comment. )
  1147.        LOAD REPORTS
  1148.         .VFNAME "FLAG  NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO
  1149. NO"
  1150.         .VFNAME .VFDATA
  1151.       END
  1152.       SET VAR LAY TO YES
  1153.     ENDIF
  1154.     IF LAY EQ NO THEN
  1155.       SET VAR TEMP TO " " + .VFDATA
  1156.       LOAD REPORTS
  1157.         .VFNAME .TEMP
  1158.       END
  1159.     ENDIF
  1160.   ENDIF
  1161.   NEXT #2 S2
  1162. ENDWHILE
  1163. SET CLEAR ON
  1164. SET MESSAGE ON
  1165. SET ERROR MESSAGE ON
  1166. QUIT
  1167.  
  1168.  
  1169.  
  1170.  
  1171.  
  1172.  
  1173. MICRORIM TECHNICAL NOTE
  1174. ________________________________________________________
  1175.  
  1176. FAST MULTI-SCREEN FORMS
  1177.  
  1178.  
  1179.  
  1180.  
  1181.  
  1182.  
  1183.  
  1184.  
  1185.  
  1186.  
  1187.  
  1188.  
  1189. DATE      :  03/86                   NUMBER       :  EX-3-7
  1190. PRODUCT   :  R5K                     VERSIONS     :  1.01
  1191. CATEGORY  :  FORMS                   SUBCATEGORY  :  MULTI-SCREEN
  1192.  
  1193. ________________________________________________________
  1194.  
  1195. DESCRIPTION:   What is a fast and simple way to have multiple-screen
  1196. data entry forms that use table forms exclusively?
  1197.  
  1198.  
  1199.  
  1200.  
  1201. SOLUTION:   It is not necessary to use variable forms to simulate
  1202. multiple-screen data entry forms.  You can do it faster with table
  1203. forms.  RUN the command file ENTRY.CMD, listed below, to control each
  1204. data entry session.  This example assumes you have already created the
  1205. two table forms PAGE1 and PAGE2 by using the FORMS command.
  1206.  
  1207. *( ENTRY.CMD )
  1208. SET MESSAGES OFF
  1209. SET VAR NUMBER INTEGER
  1210. SET VAR LOOPER TO 1
  1211. NEWPAGE
  1212. FILLIN NUMBER USING "How many two-page forms do you want to enter? "
  1213. WRITE "After entering page one of each form, press [ESC] and then
  1214. press [A]"
  1215. WRITE " "
  1216. WRITE "After entering page two of each form, press [ESC] and then
  1217. press [C]"
  1218. WRITE " "
  1219. WRITE "Press any key to begin this data entry session"
  1220. PAUSE
  1221.  
  1222. WHILE LOOPER LE .NUMBER THEN
  1223.   ENTER PAGE1 FOR 1 ROW
  1224.   EDIT USING PAGE2 WHERE COUNT = LAST
  1225.  
  1226. *( If you have more than two pages, repeat the EDIT command line
  1227.    listed above and change the form name to PAGE3, PAGE4, etc.)
  1228.  
  1229.   SET VAR LOOPER TO .LOOPER + 1
  1230. ENDWHILE
  1231.  
  1232. If you want the operator to press the same thing after entering both
  1233. pages it will be necessary to modify the above code.  The way it is
  1234. now, the operator will need to press [ESC] [A] for page one and [ESC]
  1235. [C] for page two.  To modify the code, first load a row that has null
  1236. values for all the rows by inserting the following code as the first
  1237. section in the WHILE loop:
  1238.  
  1239. SET NULL -0-
  1240. LOAD TBLNAME
  1241. FILL
  1242. -0-
  1243. END
  1244.  
  1245.  
  1246.  
  1247.  
  1248.  
  1249.  
  1250.  
  1251.  
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258.  
  1259.  
  1260.  
  1261.  
  1262.  
  1263.  
  1264.  
  1265.  
  1266.  
  1267.  
  1268.  
  1269.  
  1270.  
  1271.  
  1272.  
  1273.  
  1274.  
  1275.  
  1276.  
  1277.  
  1278.  
  1279.  
  1280.  
  1281.  
  1282.  
  1283.  
  1284.  
  1285.  
  1286.  
  1287.  
  1288.  
  1289.  
  1290.  
  1291.  
  1292.  
  1293.  
  1294.  
  1295.  
  1296.  
  1297.  
  1298.  
  1299.  
  1300.  
  1301.  
  1302.  
  1303.  
  1304.  
  1305.  
  1306.  
  1307.  
  1308.  
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.  
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.  
  1321. Next, change the ENTER command line to the following:
  1322.  
  1323. EDIT USING PAGE1 WHERE COUNT = LAST
  1324.  
  1325. Now the operator will press [ESC] [C] on both page one and two.
  1326. However, keep in mind that this modification will slow down the
  1327. execution speed.
  1328.  
  1329.