home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a031 / db15_1.ddi / READ.ME < prev   
Encoding:
Text File  |  1992-03-10  |  27.0 KB  |  764 lines

  1.                     WELCOME TO dBASE IV 1.5
  2.                     -----------------------
  3.  
  4. This file contains important information that is not contained in the
  5. documentation for dBASE IV 1.5. All information in this file supersedes
  6. information in the dBASE IV 1.5 documentation.
  7.  
  8. TABLE OF CONTENTS
  9. -----------------
  10.  
  11.   1. Notes on Queries
  12.   2. Notes on DBHEAP
  13.   3. Creating User-defined Help
  14.   4. Creating Pop-ups for Data Validation
  15.   5. Guidelines for Interrupts
  16.   6. Changes to the REPLACE FROM ARRAY Command
  17.   7. Notes on HyperDisk
  18.   8. REPLACE ON <keyfield> in a Network Environment
  19.   9. Reinstalling Printer Drivers
  20.  10. Installing dBASE IV RunTime on a Network
  21.  11. Installation Notes for Network Access Pack Users
  22.  12. Using dBTUTOR on a Network
  23.  13. Notes for Banyan Vines Version 4.10 Users
  24.  14. Specific Documentation Corrections
  25.  15. Guidelines for Using the Design and Data Surface Programs
  26.  16. Notes on DBSETUP
  27.  
  28.  
  29. 1. NOTES ON QUERIES
  30.    ----------------
  31.  
  32. Using IQ! to Optimize Queries:
  33.  
  34. IQ! is Borland's exclusive automatic Index Query optimization technology
  35. embedded within QBE. To use IQ!:
  36.  
  37. 1) Make sure you have a database open, and then select the Queries Design
  38.    tool from the Control Center.
  39.  
  40. 2) Select the Fields menu.
  41.  
  42. 3) The Filter Method option on the Fields menu offers 4 choices: OPTIMIZED,
  43.    SET KEY, INDEX...FOR, and SET FILTER. Select OPTIMIZED by pressing the
  44.    Spacebar or Enter key.
  45.  
  46. 4) Press the Esc key to return to the Queries Design tool.
  47.  
  48. OPTIMIZED automatically selects the fastest method for processing your
  49. query among the three filter methods (SET KEY, INDEX...FOR, or SET FILTER).
  50.  
  51.  
  52. Linking and Sorting Operations:
  53.  
  54. QBE linking and sorting operations on calculated fields involving more
  55. than one database file are not supported.
  56.  
  57. If you use a complex calculated field involving more than one database
  58. file in QBE and try to link or sort on this field, you'll get the
  59. following error message:
  60.  
  61.   "Operation not allowed for calculated fields"
  62.  
  63.  
  64. Creating Links with the Mouse:
  65.  
  66. On the Queries Design screen, you can create links by pointing with
  67. the mouse. The mouse cursor alone does not create links, but you can
  68. use the mouse to position the keyboard cursor.
  69.  
  70. Click on the F3/F4, Shift-Tab, and Tab keystroke identifiers (also known
  71. as "hotkeys") on the navigation line to move the keyboard cursor into the
  72. field you want to link.
  73.  
  74. When you've positioned the keyboard cursor into the linking field, click
  75. on the Enter hotkey.
  76.  
  77.  
  78. 2. NOTES ON DBHEAP
  79.    ---------------
  80.  
  81. The following information corrects the DBHEAP section on page 2-12 of the
  82. Getting Started manual:
  83.  
  84. DBHEAP is a DOS environment variable that you set at the DOS prompt
  85. before you start dBASE IV. DBHEAP tells dBASE how much of the RAM
  86. available after loading dBASE should be reserved for memory-intensive
  87. operations. The syntax is:
  88.  
  89.   SET DBHEAP=<expN>
  90.  
  91. where <expN> is any value from 1 to 100. The default is 50 (if you set
  92. it to 0, it will default to 50). This number represents a percentage of
  93. available space (a value of 30 means that dBASE will use only 30% of the
  94. available RAM for memory-intensive operations, and will allocate the
  95. remaining 70% for code overlays).
  96.  
  97. Memory-intensive operations include indexing, sorting, and using memory
  98. files (such as windows, arrays, menus, memory variables, and so on).
  99.  
  100. The amount of memory available after dBASE is loaded really depends on
  101. your particular hardware configuration and the application you're running.
  102. The best way to fine-tune DBHEAP is to run an application using the
  103. default setting (50), then run it again with higher and lower DBHEAP
  104. settings to see if the application runs faster.
  105.  
  106. Suggested low/high settings to start with are 30 and 70 (the useful range
  107. is between 20 and 80).
  108.  
  109.  
  110. 3. CREATING USER-DEFINED HELP
  111.    --------------------------
  112.  
  113. The Form.gen template file lets you create user-defined Help frames.
  114.  
  115. The F1 Help key can now provide user-defined help information
  116. for individual fields on the Edit screen. When you press F1 Help,
  117. the information in the memo fields of a special database file
  118. will display in a pop-up Help window. If you want to create your own
  119. Help file, create the special database file described below.
  120.  
  121. The name of the database file must begin with the first six
  122. characters of the name of the format file, followed by "_h.dbf".
  123. For example, if the format file is called Entry.fmt, then the
  124. Help file must be called Entry_h.dbf. The database file must
  125. be created with the following structure, before you compile the
  126. form:
  127.  
  128.         Field  Field Name  Type       Width  Dec  Tag
  129.         -----  ----------  ---------  -----  ---- ---
  130.             1  FLD_NAME    Character    10         Y
  131.             2  FLD_HEADNG  Character    25         N
  132.             3  FLD_HELP    Memo         10         N
  133.        ----------------------------------------------
  134.  
  135. Enter the names of the fields for which you want help in the Fld_name
  136. field. You need to create an index tag named Fld_name, as follows:
  137.  
  138.   INDEX ON UPPER( Fld_Name ) TAG Fld_Name
  139.  
  140. You do not need to include all the fields from the database in
  141. the Help file, only the ones for which you want Help windows.
  142.  
  143. Enter the character string for the top frame of the Help window in the
  144. Fld_headng field.
  145.  
  146. Enter the Help text you want displayed for each field in the Fld_help
  147. memo field. If there is more text than will fit inside the help window,
  148. navigation instructions are displayed inside the Help window.
  149.  
  150.  
  151. 4. CREATING POP-UPS FOR DATA VALIDATION
  152.    ------------------------------------
  153.  
  154. Using CREATE/MODIFY SCREEN, you can create a data validation
  155. routine that presents a pop-up displaying the valid choices from
  156. a lookup database file when a user enters a value that does
  157. not match the lookup file.
  158.  
  159. To create a pop-up for data validation, start from the "Accept value when"
  160. portion of a field's Edit Options table on the forms design screen. You
  161. must enter the following syntax (including quotes):
  162.  
  163.   "POPUP"="<database>-><fieldname> ORDER <fieldname> [REQ] [SHADOW]"
  164.  
  165. For example, to validate the Vendor_id field in Goods.dbf against the
  166. Vendor_id field in Vendors.dbf, insert the following pop-up string in
  167. the "Accept value when" fill-in when highlighting the Vendor_id field
  168. in a form that uses Goods.dbf.
  169.  
  170.   "POPUP" = "Vendors->Vendor_id ORDER Vendor_id REQ SHADOW"
  171.  
  172. If you want to attach an additional .AND. condition to the pop-up
  173. validation, include the condition after the "POPUP"="..." expression.
  174. The condition should not be delimited with quotes.
  175.  
  176. The components of this pop-up string are:
  177.  
  178. POPUP               Initiates pop-up processing for this
  179.                     field during EDIT.
  180.  
  181. Vendors->Vendor_id  Indicates the database file to open and
  182.                     the field in that database file to use
  183.                     for data validation. You must have an index
  184.                     tag on this field.
  185.  
  186. ORDER Vendor_id     Specifies the index tag that orders this field.
  187.  
  188. REQ                 Shows that the user must enter something
  189.                     into the field before moving on. This is
  190.                     optional. If REQ is omitted, the user can
  191.                     escape the pop-up and leave the field blank.
  192.  
  193. SHADOW              Provides a shadowing effect underneath the
  194.                     pop-ups. SHADOW is optional.
  195.  
  196. You can use a field from the .DBF file you are currently working
  197. with or a .DBF from another work area. However, the validated file
  198. and the lookup must be different files. Pop-ups are usually displayed
  199. below the currently-highlighted field, unless the current field is
  200. low on the form.
  201.  
  202. Limitations of Pop-up Validation:
  203.  
  204. - This feature is designed for EDIT and might not display as smoothly
  205.   in BROWSE. If you have a pop-up on your EDIT, the F2 toggle from EDIT
  206.   to BROWSE is disabled.
  207.  
  208. - Pop-up validation cannot be used on a multiple choice field.
  209.  
  210. - Pop-up validation cannot be used on a form created by using a view that
  211.   contains more than one file.
  212.  
  213. - In order to protect a procedure file you currently have in use, EDIT
  214.   will close it on entry and reopen it on exit. If this presents a
  215.   problem with forms that use procedures, see SET LIBRARY in the Language
  216.   Reference manual, and Sysproc and SET LIBRARY in the Programming in
  217.   dBASE IV manual.
  218.  
  219. - The first six characters of the form name and the first eight characters
  220.   of the field names with these pop-ups must be unique.
  221.  
  222.  
  223. 5. GUIDELINES FOR INTERRUPTS
  224.    -------------------------
  225.  
  226. You can write or use dBASE applications in which commands or full screen
  227. operations are interrupted with another command or function. Please
  228. carefully review the extensive discussion of interrupt handling in the
  229. FUNCTION command section of the Language Reference before attempting to
  230. program any interrupt handlers of your own. Additional guidelines follow
  231. for specific situations.
  232.  
  233.  
  234. Restoring the Record Pointer:
  235.  
  236.  
  237. An important situation that is not discussed in the Language Reference
  238. manual occurs when an interrupting command or function moves the record
  239. pointer of the original database file. Each open database file has an
  240. associated work area in which one of the data items, the record pointer,
  241. tells dBASE IV which record is the active record.
  242.  
  243. When executing an interrupt routine, dBASE does not automatically save
  244. and restore the various work areas' current record pointers, regardless
  245. of the DBTRAP setting. In every work area, whichever record is active at
  246. the end of an interrupt remains the active record.
  247.  
  248. To ensure that an interrupted process (such as BROWSE) resumes smoothly
  249. after an interruption, all record pointers for the originally-active
  250. database files must be returned to the values they had just prior to
  251. interruption. Because dBASE IV does not do this automatically, your
  252. interrupt functions or procedures should take explicit steps to ensure
  253. that all record pointers are restored to their original values.
  254.  
  255. You can determine the value of the record pointer for each work area with
  256. the RECNO() function.
  257.  
  258. Following is a typical example of how to move the record pointer in dBASE
  259. IV (with the GO command), and how to ensure that the interrupted process
  260. resumes smoothly:
  261.  
  262.     FUNCTION myudf(...)
  263.     oldrecno = RECNO()
  264.     [the rest of your interrupting code here]
  265.     GO oldrecno
  266.     RETURN
  267.  
  268.  
  269. Replacing APPEND Values:
  270.  
  271.  
  272. If you write code or use an application that moves the record pointer
  273. during an interruption, (see the item above), you must take special care
  274. when you're executing the interrupt during the full-screen APPEND command.
  275.  
  276. Whenever you interrupt APPEND, you should restore the record pointer as
  277. mentioned in the previous item. In addition, your interrupting code must
  278. save (on entry) any values entered onto the APPEND screen prior to the
  279. interruption. You must then restore these saved values after the record
  280. pointer is repositioned (just before the interrupt routine exits).
  281.  
  282. These steps are required because dBASE IV keeps all values entered during
  283. the APPEND command in a temporary buffer. During APPEND, the buffer record
  284. values are handled as follows:
  285.  
  286. - If you press Esc and abandon the new record, the values are discarded.
  287.  
  288. - If you accept the new record during a normal APPEND, the values are
  289.   added to the database file as a permanent record. However, when the
  290.   record pointer is moved during an APPEND interrupt, the values in the
  291.   temporary record are not retained (they become blank). Although the
  292.   APPEND screen may show the values as they were originally entered,
  293.   those values are no longer in the temporary buffer.
  294.  
  295. A common occurrence of this is during an interrupt call to a
  296. validation UDF which uses a SEEK to check for duplicate keys. SEEK
  297. will reposition the database, changing the current record pointer and
  298. blanking the temporary buffer.
  299.  
  300. The following example illustrates the proper steps for your APPEND
  301. interrupt code. These steps ensure that the values entered before an
  302. interrupt are preserved after the interrupt. Note that this example
  303. saves previously-entered memo fields.
  304.  
  305. 1) Save the current record number.
  306.  
  307.     oldrecno = RECNO()
  308.  
  309. 2) Save any values already entered.
  310.  
  311.     numfield = FLDCOUNT()
  312.     DECLARE Fldinfo[numfield,2]
  313.     n = 1
  314.     DO WHILE n <= numfield
  315.      IF Field(n) # "_DBASELOCK"       && Don't save _DBASELOCK
  316.         Fldinfo[n,1] = FIELD(n)
  317.         IF TYPE( Field(n) ) = "M"     && Save memo text to file
  318.            SET SAFETY OFF
  319.            COPY MEMO &Fldinfo[n,1] TO LEFT(Fldinfo[n,1],8)+".xxx"
  320.            SET SAFETY ON
  321.         ELSE
  322.            Fldinfo[n,2] = &Fldinfo[n,1]
  323.         ENDIF
  324.      ENDIF
  325.      n = n+1
  326.     ENDDO
  327.  
  328. 3) Perform the rest of the interrupting code.
  329.  
  330.      [Whatever you want it to do]
  331.  
  332. 4) Return to the original record number.
  333.  
  334.      GO oldrecno
  335.  
  336. 5) Restore the previously-entered field values.
  337.  
  338.     n = 1
  339.     DO WHILE n <= numfield
  340.      IF Field(n) # "_DBASELOCK"
  341.         IF TYPE( Field(n) ) # "M"     && Restore memo text later
  342.            REPLACE &Fldinfo[n,1] WITH Fldinfo[n,2]
  343.         ENDIF
  344.      ENDIF
  345.      n = n+1
  346.     ENDDO
  347.  
  348. Memo fields cannot be restored using the REPLACE command during an
  349. APPEND interrupt. You can restore the memo field data from the files
  350. written to disk with the code shown above. These files have names
  351. created from the field names such as LEFT(Fldinfo[n,1],8)+".xxx".
  352.  
  353. If your interrupting code deliberately changes the initial field values
  354. entered into APPEND, you will need to modify the sample code shown here
  355. so that it fills those fields with their final values, not the initial
  356. values the fields had before the interrupt.
  357.  
  358.  
  359. Using Fields Lists:
  360.  
  361.  
  362. dBASE IV lets you restrict the fields on which some dBASE IV commands
  363. operate. (See the SET FIELDS command in the Language Reference manual for
  364. a list of commands affected by the fields list.) You can use a fields list
  365. in two ways:
  366.  
  367. 1) You can provide a temporary fields list when executing a command:
  368.  
  369.      BROWSE FIELDS Lastname, Firstname, City
  370.  
  371. A temporary fields list cannot reference any fields outside the global
  372. fields list (if SET FIELDS is ON), and it does not affect the global
  373. fields list.
  374.  
  375. 2) You can set up a global fields list with the SET FIELDS command:
  376.  
  377.      SET FIELDS TO Lastname, Firstname, City
  378.  
  379. Once you have established the global fields list, you can change it in
  380. two ways:
  381.  
  382. 1) By executing the SET FIELDS or CLEAR FIELDS commands.
  383.  
  384. 2) By closing a database file containing fields in the fields list.
  385.  
  386. dBASE executes these commands at any time, without any restrictions,
  387. including executing them within an interrupt routine. However,
  388. changing the fields list within an interrupt routine can prevent
  389. the interrupted command from finishing correctly.
  390.  
  391. If your interrupt routine interrupts a command that uses a fields list, do
  392. not use these actions (SET FIELDS, CLEAR FIELDS, or closing a database
  393. file containing fields in the fields list) to change or discard the global
  394. fields list during the interruption.
  395.  
  396.  
  397. 6. CHANGES TO THE REPLACE FROM ARRAY COMMAND
  398.    -----------------------------------------
  399.  
  400. In dBASE IV 1.1, a one-dimensional array replaced the records within
  401. the scope that met the condition. However, REPLACE FROM ARRAY...ALL
  402. replaced only one database record.
  403.  
  404. In dBASE IV 1.5, a one-dimensional array will replace the first record in
  405. the database file that meets the scope condition. To replace more than
  406. one record in the database file with the elements of a one-dimensional
  407. array, you can use a DO WHILE structure.
  408.  
  409. For example:
  410.  
  411. *--- Using the CONTACTS database, assign a new area code to the
  412. *--- city of 'TORRANCE', and a new sales rep 'Samuel Smith'.
  413.  
  414.      DECLARE New_Code[2]
  415.  
  416.      New_Code[1] = '310'                     && New area code
  417.      New_Code[2] = 'Samuel Smith'            && New sales rep
  418.  
  419.      USE Contacts
  420.  
  421.      DO WHILE .NOT. EOF()
  422.           IF Area_Code = '213' .AND. City = 'TORRANCE'
  423.             REPLACE FROM ARRAY New_Code FIELDS Area_Code, Sales_Rep
  424.           ENDIF
  425.           SKIP
  426.      ENDDO
  427.  
  428. For further information on using REPLACE FROM ARRAY, please see the
  429. dBASE IV 1.5 Language Reference manual.
  430.  
  431.  
  432. 7. NOTES ON HYPERDISK
  433.    ------------------
  434.  
  435. To improve performance on PCs with extra memory, dBASE IV 1.5 supports the
  436. optional use of the HyperDisk disk caching program, which is provided as a
  437. standard dBASE software component. Following are known incompatibilities
  438. with the HyperDisk program.
  439.  
  440.  
  441. Incompatibilities with Automatic Compression Programs:
  442.  
  443. The HyperDisk cache program and various automatic disk compression
  444. programs, such as Stacker and SuperStor, conflict in their management of
  445. low-level disk I/O, leading to a fundamental incompatibility.
  446.  
  447. If the dBASE HyperDisk cache is active when dBASE is used to access data
  448. on a compressed logical drive managed by Stacker or SuperStor, the
  449. compressed logical drive will most probably become corrupt and unusable.
  450.  
  451. If you are already using Stacker or SuperStor or any other automatic
  452. compression program, disable the dBASE HyperDisk cache program. To do
  453. this during dBASE installation, select the option of not using the
  454. cache. If dBASE is already installed and you want to begin using an
  455. automatic compression program, disable the dBASE cache first. To do
  456. this, go to the drive and directory in which dBASE is installed and
  457. enter the command:
  458.  
  459.   CACHEDB OFF
  460.  
  461. This will disable the dBASE HyperDisk cache and eliminate the conflict.
  462.  
  463.  
  464. Incompatibilities with Microsoft Windows:
  465.  
  466. If you're running dBASE IV in Microsoft Windows, disable the HyperDisk
  467. cache as shown above and use the version of Smartdrv.sys provided with
  468. Windows.
  469.  
  470.  
  471. 8. REPLACE ON <keyfield> IN A NETWORK ENVIRONMENT
  472.    ----------------------------------------------
  473.  
  474. Replacements on key fields of an indexed database file also update the
  475. index file if it's in use. When the replacement is made, the record moves
  476. to a new position in the index file if the index is active. If you specify
  477. a scope, a FOR, or a WHILE when making replacements on an indexed field,
  478. (and the index is active) all the records you intended may not be replaced.
  479. For example, if you REPLACE ALL, only the first record and those that
  480. follow the new key field value will be replaced. To replace all the
  481. records, you should either put the database in natural order by entering
  482. SET ORDER TO or use the database exclusively with USE <database name>
  483. EXCLUSIVE.
  484.  
  485.  
  486. 9. REINSTALLING PRINTER DRIVERS
  487.    ----------------------------
  488.  
  489. Some printer driver names, such as Ibmpro.pr2, have been changed in dBASE
  490. IV version 1.5. If you are using IBMPRO printers, reinstall the printer
  491. drivers using DBSETUP.
  492.  
  493. If you run dBASE IV 1.5 with your old Config.db file, you might get an
  494. error message like "File not found" indicating that the printer driver
  495. could not be found. If you get this message, use DBSETUP to reinstall
  496. the new versions of your printer drivers.
  497.  
  498.  
  499. 10. INSTALLING dBASE IV RUNTIME ON A NETWORK
  500.     -----------------------------------------
  501.  
  502. dBASE IV RunTime is a separate package that lets you distribute
  503. compiled and (optionally) linked object code files as a stand-alone
  504. application. If you own the RunTime package and install it on a network,
  505. be sure to mark the following files read-only (use the DOS ATTRIB
  506. command):
  507.  
  508.   Runtime.res
  509.   Runtime.ovl
  510.  
  511.  
  512. 11. INSTALLATION NOTES FOR NETWORK ACCESS PACK USERS
  513.     ------------------------------------------------
  514.  
  515. If you install single-user dBASE and later purchase the Network Access
  516. Pack to support additional users, make the following changes after
  517. running ADDUSER4:
  518.  
  519. 1) Delete the EXCLUSIVE = ON statement from your Config.db file
  520.  
  521. 2) Mark the following files read-only (use the DOS ATTRIB command):
  522.  
  523.    dBase1.res
  524.    dBase2.res
  525.    dBase3.res
  526.    dBase.ovl
  527.  
  528. You should also mark these files read-only after running dBaseovl.bat
  529. on a network.
  530.  
  531.  
  532. 12. USING dBTUTOR ON A NETWORK
  533.     --------------------------
  534.  
  535. You can run dBTUTOR on a network only if you disable your network's
  536. message protocol. Otherwise, your computer will hang if a message
  537. notice interrupts the dBTUTOR program.
  538.  
  539.  
  540. 13. NOTES FOR BANYAN VINES VERSION 4.10 USERS
  541.     -----------------------------------------
  542.  
  543. Unless you enable NetBIOS extensions, Banyan Vines version 4.10 will
  544. return a null value for dBASE's ID(), LKSYS(2), and LKSYS(5) functions,
  545. and for the DISPLAY USER command. In addition, dBASE users attempting to
  546. BEGIN TRANSACTION will receive error message #183, "Unterminated
  547. transaction file exists, unable to start transaction." If you enable
  548. NetBIOS extensions (a TSR), Banyan will return a NetBIOS User ID that
  549. dBASE can use.
  550.  
  551. To enable NetBIOS extensions, add the following to the Autoexec.bat on
  552. the workstation:
  553.  
  554.   SETNETB /Name:<nodename>
  555.  
  556. where <nodename> is the name you want dBASE IV to use. This name can
  557. be your Banyan login name. To avoid conflicts in dBASE IV, verify that
  558. the nodename is unique for all dBASE users. If you have problems enabling
  559. NetBIOS extensions, contact your Banyan Network Administrator.
  560.  
  561.  
  562. 14. SPECIFIC DOCUMENTATION CORRECTIONS
  563.     ----------------------------------
  564.  
  565. Following are corrections to the Language Reference manual.
  566.  
  567.  
  568. Page 2-133, IMPORT
  569.  
  570. IMPORTing a PFS file will also create a .vue file.
  571.  
  572.  
  573. Page 2-144, KEYBOARD
  574.  
  575. Table 2-9, Supported Key Labels, should include the following note:
  576.  
  577. You cannot use {Enter} or {Esc} with the KEYBOARD command. To send an
  578. Enter key, use either {Ctrl-M} or {13}. To send an Esc key, use {27}.
  579. You can continue to use the CHR() function with these values.
  580.  
  581.  
  582. Page 2-189, QUIT
  583.  
  584. The <expN> value can be an integer between -(2^31)+1 to (2^31)-1. dBASE
  585. will return to DOS a value based on the value of MOD({return}, 256)
  586. to yield a number in the range of 0 to 255.
  587.  
  588.  
  589. Page 2-228, TOTAL
  590.  
  591. The first paragraph on this page states "The structure of the TO file
  592. is the same as the active database file as limited by FIELDS, except
  593. that memo fields are not copied to the new file." Actually, the
  594. FIELDS option limits only the fields that are actually totaled. To
  595. limit the fields in the TO file, use the SET FIELDS TO command.
  596.  
  597.  
  598. Page 3-46, SET FILTER TO
  599.  
  600. Using the optional [FILE <filename>/?] parameter and the [<condition>]
  601. parameter are mutually exclusive. Correct the syntax as follows:
  602.  
  603.     SET FILTER TO [ FILE <filename>/? ] / [ <condition> ]
  604.  
  605.  
  606. Page 3-50, SET FUNCTION
  607.  
  608. The range of values accepted for the numeric key assignment, <expN>, is
  609. omitted. The range is between 2 and 29.
  610.  
  611.  
  612. Page 3-58, SET KEY
  613.  
  614. Correct the syntax as follows:
  615.  
  616.     SET KEY TO [ <exp:match> / RANGE <exp:range> ]
  617.                     [ IN <expWA> ]
  618.  
  619.     where <exp:range> ::= <exp:low> , <exp:high>
  620.                           <exp:low> [ , ]
  621.                           , <exp:high>
  622.  
  623. The syntax and the values shown for the range in the SET KEY example on
  624. page 3-59 are wrong. Correct the example as follows:
  625.  
  626.     . USE People
  627.     . INDEX ON Zip TAG Zip
  628.     . SET KEY TO RANGE '60000' , '90000'
  629.     . BROWSE
  630.  
  631.  
  632. Page 3-60, SET LIBRARY TO
  633.  
  634. The <filename> parameter is optional. SET LIBRARY TO with no
  635. filename will close the active LIBRARY file. Correct the syntax as
  636. follows:
  637.  
  638.     SET LIBRARY TO [ <filename> ]
  639.  
  640.  
  641. Page 3-73, SET PRINTER TO
  642.  
  643. The <DOS device> parameter is optional. If the device name is missing,
  644. SET PRINTER TO will reset the printer to the default DOS printer
  645. device. Correct the syntax as follows:
  646.  
  647.     SET PRINTER TO [ <DOS device> ]
  648.  
  649.  
  650. Page 3-98, SET WINDOW
  651.  
  652. The <window name> parameter is optional. If you do not include a window
  653. name, the window for the memo field is reset to none. Correct the syntax
  654. as follows:
  655.  
  656.     SET WINDOW OF MEMO TO [ <window name> ]
  657.  
  658.  
  659. Page 4-12, CALL()
  660.  
  661. Correct the syntax as follows:
  662.  
  663.     CALL( <expC>, <expression> [, <expression list>] )
  664.  
  665.  
  666. Page 4-141, TAGNO()
  667.  
  668. Correct the syntax as follows:
  669.  
  670.     TAGNO( [ <order name> [, <mdx name> [, <alias> ]]])
  671.  
  672.  
  673. 15. GUIDELINES FOR USING THE DESIGN AND DATA SURFACE PROGRAMS
  674.     ---------------------------------------------------------
  675.  
  676. In order to maintain the integrity of the Control Center and the user's
  677. design surface session, your surface program should keep track of the
  678. following settings and restore them upon completion:
  679.  
  680. 1) Catalogs
  681.  
  682. The foundation of the Control Center is the catalog file. When returning
  683. from a surface program, ensure that you return control to the original
  684. catalog file.
  685.  
  686. Commands like CLEAR ALL, CLOSE ALL, and SET CATALOG TO will close the
  687. active catalog file. If you use these commands, you must reset the
  688. catalog file before ending the surface program.
  689.  
  690. Use the CATALOG() function to save the current catalog, then restore it
  691. when ending the surface program.
  692.  
  693. 2) Database files
  694.  
  695. Commands like USE, CLOSE DATABASES, CLOSE ALL, and CLEAR ALL will close
  696. an open database file. If you use these commands in your surface program,
  697. you must reopen any database files that were in use before the surface
  698. program was launched.
  699.  
  700. Use the DBF() function to save the name of any database files in use, then
  701. restore them when ending the surface program.
  702.  
  703. Note:  If DBTRAP is ON, and a database file was at the
  704.        beginning of the surface program, CLOSE ALL, CLOSE
  705.        DATABASES, and CLEAR ALL will leave that one database
  706.        file open.
  707.  
  708. 3) Indexes
  709.  
  710. Certain design surfaces, such as the queries design screen, rely on
  711. indexes associated with the user's database files.
  712.  
  713. If your surface program deletes an index that was associated with a
  714. database file in use when your surface program was launched, then you
  715. must recreate the index before returning to the design surface.
  716.  
  717. Use the MDX(), NDX(), and KEY() functions to save the name and key
  718. expressions of any indexes, and then recreate them when ending the
  719. surface program.
  720.  
  721. 4) Work area
  722.  
  723. In your surface program, you can move to other work areas and open
  724. and close files in these other work areas. Unless you are using a custom
  725. Form, Report, or Label.gen, you must be sure to return to the original
  726. work area before your field or layout program returns to the design
  727. surface.
  728.  
  729. Use the SELECT() function to save the current work area, then reselect it
  730. when ending your surface program.
  731.  
  732. 5) The screen
  733.  
  734. Through the use of surface programs, you are given complete control of the
  735. design and data screens. Your program can clear the screen and add any
  736. output you want into it. When returning to the surface, dBASE does not
  737. automatically repaint the screen for you.
  738.  
  739. If you want to maintain the user's screen, use the DEFINE WINDOW and
  740. ACTIVATE WINDOW commands in the beginning of your surface program, do
  741. any screen output, then issue a DEACTIVATE WINDOW command before returning
  742. to the surface.
  743.  
  744. Another way to save the surface screen is to issue a SAVE SCREEN command
  745. at the beginning of your surface program, then a RESTORE SCREEN command
  746. at the end.
  747.  
  748.  
  749. 16. NOTES ON DBSETUP
  750.     ----------------
  751.  
  752. If you alter or create your Config.db using DBSETUP, do not enter commas
  753. into any of the following Files menu options:
  754.  
  755.     Prgapplic
  756.     Prgbrowse
  757.     Prgcc
  758.     Prgdata
  759.     Prgedit
  760.     Prgform
  761.     Prglabel
  762.     Prgquery
  763.     Prgreport
  764.