home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / database / db3anam.zip / DB3ANAM.TXT
Text File  |  1986-03-28  |  79KB  |  2,349 lines

  1. - Locating dBASE III Anomalies and Workarounds -
  2. ( from the Source - Ashton Tate SIG - ATSIG )
  3.  
  4. 108 item(s) found for  ALL
  5.  
  6.  
  7. title:  USING SUSPEND WITH ON (DEVELOPER'S RELEASE)
  8. version:  DR
  9. date:  10 Mar 1986
  10. text: 
  11. Using the SUSPEND command with the ON command in a program may
  12. cause some unexpected results.  The command:
  13.  
  14. ON KEY SUSPEND
  15.  
  16. in a program will return the error message, "Valid only in
  17. programs" when a key is pressed.  The program, however, will be
  18. SUSPENDed.
  19.  
  20. The command:
  21.  
  22. ON ERROR SUSPEND
  23.  
  24. behaves erratically.  It will SUSPEND the program, although
  25. RESUME may have to be entered twice before the program actually
  26. resumes execution.
  27.  
  28.  
  29.  
  30. title: SET FILTER TO EXPRESSION IN PARENTHESIS 
  31.        (DEVELOPER'S RELEASE AND RUNTIME+)
  32. version:  DR
  33. date:  10 Mar 1986
  34. text: 
  35.  
  36. If a SET FILTER TO command has a parenthesis following the TO
  37. and is encrypted using DBC.COM, that command line will produce
  38. the error message "Invalid function name" when it is run from
  39. dBRUN or dBASE III Developer's Release.  The command:
  40.  
  41. SET FILTER TO (F1 = 2 .OR. F2 = 2) .AND. F3 > 1
  42.  
  43. will produce this error when encrypted and run.  To work
  44. around, build the FILTER expression by placing the simplest
  45. non-grouped subexpression first and then begin the grouped
  46. subexpressions.  For example:
  47.  
  48. SET FILTER TO F3 > 1 .AND. (F1 = 2 .OR. F2 = 2)
  49.  
  50.  
  51. title:  IIF() NESTTING LIMITATION (DEVELOPERS'S RELEASE)
  52. version:  DR
  53. date:  10 Mar 1986
  54. text: 
  55. There is a limit to the number of times IIF() may be nested.
  56. Nesting this function eight or more deep will return a zero
  57. instead of the designated value.
  58.  
  59.  
  60. title:  SORT IGNORES EXTENSION OF RESULTANT DATABASE
  61. version:  10 11 DR
  62. date:  10 Mar 1986
  63. text: 
  64. SORTing to a file with an extension other than .DBF will result
  65. in the extension being ignored and a .DBF extension given to
  66. the new file.  For example:
  67.  
  68. SORT ON Field1 TO Newfile.NEW
  69.  
  70. will create Newfile.DBF.
  71.  
  72.  
  73. title:  SET TALK ON HAS PRECEDENCE OVER SET CONSOLE OFF
  74. version:  10 11 DR
  75. date:  10 Mar 1986
  76. text: 
  77. For commands that produce a running total or a final result,
  78. such as INDEX or COUNT, the SET TALK ON command takes
  79. precedence over the SET CONSOLE OFF command so that the results
  80. of TALK will be displayed when SET CONSOLE is OFF.  The
  81. following routine demonstrates this.
  82.  
  83. SET TALK ON
  84. SET CONSOLE OFF
  85. USE Test
  86. COUNT TO memvar <--- The results of COUNT display.
  87. ? memvar        <--- This is suppressed by SET TALK OFF.
  88.  
  89.  
  90.  
  91. The SET CONSOLE OFF command in the Developer's Release of dBASE
  92. III does suppress the results of SET TALK ON in all cases.
  93.  
  94.  
  95. title:  @ <ROW>, <COL> WITH NO ARGUMENTS
  96. version:  10 11 DR
  97. date:  10 Mar 1986
  98. text: 
  99. An @...SAY statement sent to the printer with no argument and a
  100. row coordinate greater than 24 will return the error message
  101. "SAY/GET position is off the screen."  For example,
  102.  
  103. SET DEVICE TO PRINT
  104. @ 25,0
  105.  
  106. The @ <row>, <col> command with no argument clears that row on
  107. the screen beginning at the column position, regardless of the
  108. status of SET DEVICE TO.  Be sure that any @...SAY directed to
  109. the printer has an argument.
  110.  
  111.  
  112. title:  CTRL-K-R IN MODIFY COMMAND
  113. version:  10 11
  114. date:  10 Mar 1986
  115. text: 
  116. When using the Ctrl-K-R in the dBASE III word processor, there
  117. is a limit of fifteen characters to the name of the file being
  118. imported.  If the name of the file, including drive designator
  119. and path, is sixteen characters or longer, problems will
  120. occur.  The computer may freeze with the message "File does not
  121. exist (Hit SPACE)" being displayed; or the error message "***
  122. STACK OVERFLOW ***" appears and the user is returned to
  123. PC/MS-DOS.  For example, the filenames:
  124.  
  125. B:\A\Data10.TXT
  126. B:\Datapath\One
  127.  
  128. are acceptable, while
  129.  
  130. B:\A\Data101.TXT <-- "File does not exist (Hit SPACE)"
  131. B:\Datapath\File <-- "*** STACK OVERFLOW ***"
  132.  
  133. are not.  In the Developer's Release, MODIFY COMMAND will
  134. support filenames including paths exceeding sixteen
  135. characters.
  136.  
  137.  
  138. title:  DO PROGRAM CAUSES RETURN POINTERS TO BE LOST
  139. version:  10 11
  140. date:  10 Mar 1986
  141. text: 
  142. Executing a command file with the same name as a procedure in a
  143. procedure file that has been opened and closed causes return
  144. pointers to be lost.  For example, if a file has a nested DO
  145. WHILE, RETURNing from the subprogram will cause the controlling
  146. DO WHILE loop to terminate abnormally.  The program below
  147. demonstrates this problem.
  148.  
  149. *--- Test.PRG
  150.  
  151. DO WHILE .T.
  152.   SET PROCEDURE TO Testa
  153.   DO Test1         <-- From Testa.PRG.
  154.   CLOSE PROCEDURE
  155.   DO Test1         <-- Separate command file
  156. ENDDO                 <-- will terminate although no
  157.                       EXIT or RETURN has been executed.
  158.  
  159. This problem has been corrected in the Developer's Release of
  160. dBASE III.
  161.  
  162.  
  163. title:  BROWSE WHEN APPENDING
  164. version:  10 11 DR
  165. date:  10 Mar 1986
  166. text: 
  167. When APPENDing new records with the BROWSE command, dBASE III
  168. will not automatically pan right to allow data entry to fields
  169. that are off the screen.  Instead, the cursor will drop to the
  170. next line and dBASE III will start to enter another record.
  171. Use Ctrl-B and Ctrl-F to pan left or right, respectively, while
  172. APPENDing.
  173.  
  174.  
  175. title:  INDEX ON SUBSTR( <FIELD>, N, LEN( <FIELD> )
  176. version:  10 11
  177. date:  10 Mar 1986
  178. text: 
  179. INDEXing a database file with a key expression that includes
  180. the LEN() function as the second argument of the SUBSTR()
  181. function will result in a nonfunctional index file.  For
  182. example:
  183.  
  184. INDEX ON SUBSTR( <Field>, 1, LEN( <Field> ) ) TO;
  185. Indexfile
  186.  
  187. will create an index file that appears to be correctly
  188. constructed.  You can FIND or SEEK a record and then EDIT it.
  189. The index file, however is not updated and any attempt to GOTO
  190. a record or BROWSE will return the error message "Record not in
  191. index."
  192.  
  193. The problem is corrected in the Developer's Release.
  194.  
  195.  
  196. title:  DO <PROCEDURE> CANNOT CONTAIN SPECIAL CHARACTERS
  197. version:  10 11 DR
  198. date:  10 Mar 1986
  199. text: 
  200. In dBASE III, PROCEDURE names cannot contain special
  201. characters, although filenames can.  If the name of a PROCEDURE
  202. within a PROCEDURE file contains a special character ($, #, -,
  203. @, etc.), using the DO <procedure> command will return the
  204. error message "Unrecognized phrase/keyword in command."  For
  205. example:
  206.  
  207. *--- Proc-test.PRG
  208. PROCEDURE Test-it
  209. ? 'This is Test-it from Proc-test.PRG'
  210. RETURN
  211. * EOP Proc-test.PRG
  212.  
  213. *--- Test.PRG
  214. SET PROCEDURE TO Proc-test <--- This works properly.
  215. DO Test-it                 <--- This returns the error
  216. RETURN                          message.
  217. * EOP Test.PRG
  218.  
  219. Note that this applies only to PROCEDURE names and not to
  220. command files names.  This may be a problem if you have
  221. recently merged command files into a procedure file and your
  222. command filenames contain special characters.
  223.  
  224.  
  225. title:  INDEX ON STR()
  226. version:  10 11
  227. date:  10 Mar 1986
  228. text: 
  229. (1) Attempting to INDEX ON the concatenation of many STR() functions
  230. may create an index that is in record number order.  Specifically, if
  231. the length of the key expression is 80 or 90 characters long and
  232. consists solely of a concatenation of STR() functions, the resultant
  233. index file will be in the same order as the database file.  For
  234. example:
  235.  
  236.     . USE Numfile
  237.     . LIST
  238.  
  239.     RECORD#    NUM1  NUM2  NUM3  NUM4  NUM5  NUM6  NUM7  NUM8
  240.           1    8     8     8     8     8     8     8     8
  241.           2    7     7     7     7     7     7     7     7
  242.           3    6     6     6     6     6     6     6     6
  243.           4    5     5     5     5     5     5     5     5
  244.           5    4     4     4     4     4     4     4     4
  245.           6    3     3     3     3     3     3     3     3
  246.           7    2     2     2     2     2     2     2     2
  247.           8    1     1     1     1     1     1     1     1
  248.  
  249.     . INDEX ON STR(Num1,1)+STR(Num2,1)+STR(Num3,1)+STR(Num4,1)
  250.     +STR(Num5,1)+STR(Num6,1)+STR(Num7,1)+STR(Num8,1) TO Numex
  251.  
  252.     * The key expression in this example is 96 characters long.
  253.     * The expected result is that the records will be in
  254.     * reverse record number order when the index Numex is used.
  255.  
  256.     . LIST
  257.  
  258.     RECORD#    NUM1  NUM2  NUM3  NUM4  NUM5  NUM6  NUM7  NUM8
  259.           1    8     8     8     8     8     8     8     8
  260.           2    7     7     7     7     7     7     7     7
  261.           3    6     6     6     6     6     6     6     6
  262.           4    5     5     5     5     5     5     5     5
  263.           5    4     4     4     4     4     4     4     4
  264.           6    3     3     3     3     3     3     3     3
  265.           7    2     2     2     2     2     2     2     2
  266.           8    1     1     1     1     1     1     1     1
  267.  
  268.     The database file has been indexed in record number order and is
  269.     identical to the unindexed file.
  270.  
  271. (2) The maximum length of key expression is 100 characters.
  272. In the example above, the key expression is 96 characters long which
  273. is within the limitation.  The maximum length of the key itself is
  274. also 100 characters.  In the example above, the key is 8 characters
  275. long, one character for each field.  If either the key or the key
  276. expression exceeds the 100 character limitation, dBASE III will
  277. normally return the error message "Index is too big (100 char
  278. maximum)".  However, this error is not trapped if the key expression
  279. is formed by the concatenation of STR() functions.  The INDEX command
  280. given in the paragraph above may be lengthened as in the following
  281. example and no error message will result.
  282.  
  283.     INDEX ON STR(Num1,1)+STR(Num2,1)+STR(Num3,1)+STR(Num4,1)
  284.     +STR(Num5,1)+STR(Num6,1)+STR(Num7,1)+STR(Num8,1)+STR(Num
  285.     1,1) TO Numex
  286.  
  287. The key expression in this command is 108 characters in length.
  288. No error message is returned when this command is executed, but one of
  289. two errors will occur.  Either the index that is created is still in
  290. record number order as explained in the first paragraph, or dBASE III
  291. will return random error messages as it attempts to create the index.
  292. Because this is not trapped, pay extra attention when you create index
  293. files from a long expression consisting of the concatenation of STR()
  294. functions.
  295.  
  296.  
  297. title:  RETURN TO MASTER
  298. version:  10 11
  299. date:  10 Mar 1986
  300. text: 
  301. RETURN TO MASTER will not work properly if it is used in a
  302. PROCEDURE which is called from within a DO WHILE loop with the
  303. MASTER as the calling program.  Specifically, the program will
  304. stop execution upon RETURNing TO the MASTER file.  However,
  305. pressing Esc will allow the user to return to the dBASE III dot
  306. prompt.  For example:
  307.  
  308.      * Test.PRG
  309.      PUBLIC one
  310.      one = "Y"
  311.      SET PROCEDURE TO Test1
  312.      DO WHILE one = "Y"
  313.         DO Pro_3
  314.         ? "Back IN Test.PRG"
  315.      ENDDO
  316.      CLOSE PROCEDURE
  317.      RETURN
  318.  
  319.      * Test1.PRG
  320.      PROCEDURE Pro_3
  321.      ? "Now in Pro_3 PROCEDURE in Test1 file"
  322.      RETURN TO MASTER
  323.  
  324. If RETURN TO MASTER is changed to RETURN, the command file works
  325. properly.  If Test.PRG were to call another file which
  326. then called the procedure file, RETURN TO MASTER will work.
  327.  
  328.  
  329. title:  ZAP, PACK, AND INDEX FILES
  330. version:  10 11 DR
  331. date:  10 Mar 1986
  332. text: 
  333. PACKing or ZAPping a database file without its index files in
  334. use, then opening the index files and adding records to the file
  335. will result in multiple record entries in the index files.  For
  336. example, the following command sequence will result in an index
  337. file with two entries for each record in the database file:
  338.  
  339.      USE File_one INDEX Alpha
  340.      COPY TO New_file
  341.      CLOSE INDEX
  342.      ZAP
  343.      SET INDEX TO Alpha
  344.      APPEND FROM New_file
  345.  
  346. Ideally, opening the index file after the file has been ZAPped
  347. should be trapped by an error message, such as "End of file
  348. encountered unexpectedly" or "Record out of range".
  349.  
  350.  
  351. title:  USE
  352. version:  10 11 DR
  353. date:  10 Mar 1986
  354. text: 
  355. An attempt to use the PC/MS-DOS directory navigation path (..) in
  356. a USE command will give unexpected results.  USEing the database
  357. will make the file active, but there will be no ALIAS.  An
  358. attempt to USE another database file in another SELECT area using
  359. the same technique, will cause the error message "ALIAS name
  360. already in use" to be displayed.
  361.  
  362.      * ---Open first database file.
  363.      USE ..\nme\Budget
  364.      DISPLAY STATUS
  365.  
  366.      Currently selected database:
  367.      Select area - 1, Database in use: C:..\nme\Budget.dbf
  368.  
  369.         Alias -
  370.  
  371.      * ---Open another database file.
  372.      SELECT 2
  373.      USE ..\nme\Sumfrm
  374.      ALIAS name already in use
  375.                 ?
  376.      USE ..\nme\sumfrm
  377.  
  378. If an ALIAS is assigned in both USE commands, no error results.
  379. If you need to avoid specifying the full path name, use the RUN
  380. command to log the previous directory and then specify the
  381. datafile to USE.  For example,
  382.  
  383.      RUN CD ..
  384.      USE nme\Budget
  385.      SELECT 2
  386.      USE nme\Sumfrm
  387.  
  388.  
  389. title:  TYPE
  390. version:  10 11
  391. date:  10 Mar 1986
  392. text: 
  393. If you attempt to use the following syntax for the TYPE command:
  394.  
  395.      TYPE <File> TO SCREEN
  396.  
  397. it will be trapped as an error and give the message, "File does
  398. not exist".  Subsequent attempts to USE or MODIFY the text file
  399. that you wanted to TYPE will return the error message, "File is
  400. already open."  CANCEL or CLEAR ALL will not close the file.
  401. QUITting and re-entering dBASE III is the only option.
  402.  
  403. The problem is fixed in the Developer's Release.  You will
  404. receive the expected error message, "Syntax error" and the file
  405. being TYPEd will remain properly closed.
  406.  
  407.  
  408. title:  TRIM() WITH LIST OR DISPLAY
  409. version:  10 11 DR
  410. date:  10 Mar 1986
  411. text: 
  412. TRIM() will not work with the LIST or DISPLAY commands when the
  413. the function is the last portion of an expression in an
  414. expression list, or the TRIM() is the last portion of an
  415. expression followed by a concatenation of spaces.  For example:
  416.  
  417.      LIST TRIM(Name), Address
  418.               ^__________________  (note TRIM() is just before
  419.                                     the comma)
  420.  
  421.      LIST TRIM(Name) + ' ' , Address
  422.                         ^-----------(note TRIM() is followed by a
  423.                                      space then the comma)
  424.  
  425. TRIM will work, however, when not in the last position of the
  426. expression list.  For example:
  427.  
  428.      LIST TRIM(Name) + ' ' + Address, City
  429.  
  430.  
  431. title:  SUSPEND (DEVELOPER'S RELEASE)
  432. version:  DR
  433. date:  10 Mar 1986
  434. text: 
  435. If you SUSPEND a command file and restart it with DO
  436. <filename> instead of RESUME, dBASE III opens the file
  437. again, without closing the previous session.  The expected error
  438. message "File is currently open" does not appear.  As each file
  439. remains open, this will eventually produce "Too many files are
  440. open."  Issuing the CANCEL command will close every instance of
  441. the open file.
  442.  
  443. This problem is most likely to occur if you are debugging a
  444. command file and forget that you are still in SUSPEND.  It is
  445. always advisable to RESUME before calling any command file if you
  446. are in the midst of a programming and debugging session.
  447.  
  448.  
  449. title:  SUM TO AND PUBLIC MEMORY VARIABLES
  450. version:  10 11
  451. date:  10 Mar 1986
  452. text: 
  453. Attempting to SUM TO memory variables that have been declared as
  454. PUBLIC will usually result in erroneous data.  Initializing the
  455. variables before the SUM command will sometimes, but not always,
  456. correct the error.  In addition to this problem, there is a
  457. practical limit to the number of expressions that may be used in
  458. one SUM command.
  459.  
  460. In order to use the SUM command reliably, follow these rules.
  461.  
  462.      1. Do not SUM TO memory variables that are PUBLIC.
  463.         Instead, use PRIVATE variables and STORE the
  464.         results of the SUM to PUBLIC variables.
  465.  
  466.      2. Limit the number of expressions in the SUM
  467.         command to three or less.
  468.  
  469.  
  470. title:  SUM PRODUCES LINEFEEDS
  471. version:  10 11
  472. date:  10 Mar 1986
  473. text: 
  474. The SUM and AVERAGE commands send two linefeeds to both the
  475. screen and printer.  For example, the following command file will
  476. output two extra linefeeds:
  477.  
  478.      SET TALK OFF
  479.      SET PRINT ON
  480.      ? "Income"
  481.      SUM Income TO inc
  482.      ? inc
  483.      SET PRINT OFF
  484.  
  485. OUTPUT:
  486.  
  487.      Income
  488.                     <--+  Two extra linefeeds.
  489.                     <--+
  490.      17384805.00
  491.  
  492. The only workaround for screen output is to SET CONSOLE OFF when
  493. executing a SUM or an AVERAGE, and SET CONSOLE ON when done.  For
  494. printer output you can use SET PRINT OFF before the command and
  495. SET PRINT ON afterward.
  496.  
  497.  
  498. title:  STORE LARGE NUMERIC
  499. version:  10 11
  500. date:  10 Mar 1986
  501. text: 
  502. Attempting to STORE a number with more than 43 digits to a memory
  503. variable will hang the computer and require a warm boot (that is,
  504. Ctrl-Alt-Del). More than 60 digits will require a cold boot (that
  505. is, restarting the system.
  506.  
  507.  
  508. title:  STORE
  509. version:  10 11
  510. date:  10 Mar 1986
  511. text: 
  512. STOREing 254 characters to a memory variable will eventually give the "Out of
  513. memory variable memory" error message even though DISPLAY MEMORY shows that
  514. there is memory space available.  With MVARSIZ at the default setting, this
  515. seems to occur after the 23rd attempt to STORE to the memory variable.
  516. Increasing the MVARSIZ will allow more STORE commands, but will eventually
  517. produce this error.  For example, the following set of commands will produce 
  518. the
  519. message after 23 iterations, with MVARSIZ set at the default.
  520.  
  521.           CLEAR MEMORY
  522.           DO WHILE .T.
  523.              STORE SPACE( 254 ) TO memvar
  524.           ENDDO
  525.  
  526.  
  527. title:  SORT WITH 66 RECORDS
  528. version:  10 11
  529. date:  10 Mar 1986
  530. text: 
  531. SORTing a file that has more than 66 records in such
  532. a way that the resulting file has exactly 64 records
  533. will produce a file in which the first record is corrupted.
  534.  
  535.  
  536. title:  SORT FOR SUBSTR()
  537. version:  10 11
  538. date:  10 Mar 1986
  539. text: 
  540. Attempting to SORT FOR SUBSTR(fieldname,n,n) = <value> will return
  541. "00% Sorted *** STACK OVERFLOW ***", dropping the user out of dBASE
  542. III to the operating system.
  543.  
  544.  
  545. title:  SORT FOR A RANGE OF DATES
  546. version:  10 11
  547. date:  10 Mar 1986
  548. text: 
  549. Attempting to SORT only a subset of a database file based on a
  550. single date or a range of dates may cause a problem if the
  551. following form is used:
  552.  
  553.      SORT ON <exp> TO <file> FOR DTOC(date)="99/99/99"
  554.  
  555. where the 9's represent any date.  The error message that will
  556. result is:
  557.  
  558.      00% Sorted *** STACK OVERFLOW ***
  559.  
  560. and you will be dropped out of dBASE III to the operating system.
  561. To prevent this problem, use the following form.
  562.  
  563.      SORT ON <exp> TO <file> FOR date=CTOD("99/99/99")
  564.  
  565.  
  566. This work-around will not work for blank dates.  The sort will
  567. appear to execute normally, but no records will be written to the
  568. target file.
  569.  
  570.  
  571. title:  SORT
  572. version:  10 11 DR
  573. date:  10 Mar 1986
  574. text: 
  575. (1) Attempting to SORT a file with SET FILTER TO
  576. SUBSTR(fieldname,n,n)  =  <value> will return a "*** STACK
  577. OVERFLOW ***" and  drop you out of dBASE III to the operating
  578. system.
  579. [1.0, 1.1]
  580.  
  581. (2) SORTing a database file from a command file that is nested 13
  582. levels deep will fail with a system crash.  The SORT command will
  583. return a status message stating that a percentage of the records
  584. in the original file were SORTed, but then the computer will
  585. freeze with no error message or warning.
  586. [1.0, 1.1, D.R.]
  587.  
  588. (3) Attempting to use the command SORT TO <Filename> ON
  589. <Fieldname> with a RELATION SET produces the error message "***
  590. STACK OVERFLOW ***" and will drop you out of dBASE III to the
  591. operating system prompt.  This will not occur if the RELATION is
  592. SET to RECNO().
  593. [1.0, 1.1]
  594.  
  595. (4) One cannot SORT to a file in a directory other than the
  596. current one.  An attempt to do this will not produce an error
  597. message and will not create the designated file.  Instead, a file
  598. name W44 will be created in the current directory of the default
  599. drive.
  600. [1.0, 1.1]
  601.  
  602. (5) The effective limit of SORT is in the 32,000 record range.
  603. SORTing a file with more than 32,000 records will produce the
  604. following error messages:
  605.  
  606.           nn% Sorted
  607.           Records do not balance...(PROGRAM ERROR)
  608.           100% Sorted
  609.  
  610. The SORTed file will not contain all the records from the
  611. original.
  612.  
  613. The workaround for sorting databases in excess of 32,000 records
  614. is to INDEX and then COPY.  The procedure is as follows:
  615.  
  616.           USE <filename>
  617.           INDEX ON <sort key> to Temp
  618.           COPY TO Sorted
  619. [1.0, 1.1]
  620.  
  621.  
  622. title:  SET RELATION TO
  623. version:  10 11
  624. date:  10 Mar 1986
  625. text: 
  626. The command syntax SET RELATION INTO <file> TO <key>  will not
  627. SET the RELATION although no error message is displayed and
  628. DISPLAY STATUS shows the RELATION as SET.
  629.  
  630. The SET RELATION command is sensitive to the order that the INTO
  631. and the TO clauses are specified.  Apparently, everything after
  632. the INTO clause is ignored.  Be sure to check that you have
  633. specified the TO clause before the INTO clause if your RELATIONs
  634. appear to fail.
  635.  
  636.  
  637. title:  SET ORDER TO (DEVELOPER'S RELEASE)
  638. version:  DR
  639. date:  10 Mar 1986
  640. text: 
  641. SET ORDER TO 0 or <space> is intended to cause the database file
  642. to act in physical, unindexed order, while maintaining the
  643. integrity of the open indexes.  However, the indexes are not
  644. updated if the key field is changed.  For example:
  645.  
  646.    USE <Filename> INDEX <Index1>, <Index2>
  647.    SET ORDER TO
  648.    EDIT         <------ Change key field for Index1.NDX
  649.    SET ORDER TO 1
  650.  
  651. will produce the error message "Record is not in index."
  652.  
  653.  
  654. title:  SET HISTORY TO (DEVELOPER'S RELEASE)
  655. version:  DR
  656. date:  10 Mar 1986
  657. text: 
  658. The SET HISTORY TO command is documented as having a 16,000
  659. command line limit.  However, there are a number of problems that
  660. can occur when a large number is used as its argument.
  661.  
  662. 1. There is no way to escape from a LIST HISTORY.  If you SET
  663.    HISTORY TO a large number, enter a large number of commands,
  664.    and LIST HISTORY, the computer may be tied up for some time as
  665.    the entire contents of HISTORY scroll by.  Pressing Esc will
  666.    not interrupt the LIST.
  667.  
  668. 2. HISTORY appears to use memory without limit. If you SET
  669.    HISTORY TO is a large number, it is possible to use all the
  670.    available memory.  So much memory may be used that it is
  671.    impossible to return to the operating system level.  The error
  672.    message:
  673.  
  674.           Memory allocation error
  675.            Cannot load COMMAND, system halted
  676.  
  677.    appears if you attempt to QUIT in such as case.  Setting
  678.    MAXMEM higher than the default will delay, but not prevent the
  679.    problem.
  680.  
  681.    Furthermore, the dBASE III Reference Manual implies that
  682.                     --------------------------
  683.    HISTORY respects the MAXMEM setting by stating that the RUN
  684.    command may overwrite the HISTORY stack unless MAXMEM is set
  685.    higher than 256K.  However, HISTORY appears to reserve memory
  686.    beyond MAXMEM.  If the number of commands to store in HISTORY
  687.    is SET high and HISTORY contains many entries, attempting the
  688.    RUN command will return the error message, "Insufficient
  689.    memory."
  690.  
  691. 3. There is no error trapping on the upper limit of HISTORY and
  692.    so it is possible to SET it to values higher than 16,000.
  693.    Values less than 1,000,000 appear to work properly, although
  694.    it is not known if more than 16,000 lines of code are stored.
  695.  
  696.    When the value of HISTORY exceeds 1,000,000, the HISTORY
  697.    buffer is corrupted.  Any attempt to DISPLAY or LIST HISTORY
  698.    will display graphic characters to the screen and the computer
  699.    may freeze.
  700.  
  701.  
  702.  
  703.  
  704.  
  705. title:  SET FUNCTION, LIMIT OF 30 CHARACTERS
  706. version:  10 11
  707. date:  10 Mar 1986
  708. text: 
  709. The maximum number of characters (including semicolons) that can
  710. be programmed into a function key is 30.  Exceeding this
  711. limitation is not trapped as an error.  Instead, the extra
  712. characters wrap into the next function key.  This problem will
  713. also cause an incorrect display of the function key values in
  714. full-screen SET.
  715.  
  716.  
  717. title:  SET FORMAT TO <FILENAME>
  718. version:  10 11 DR
  719. date:  10 Mar 1986
  720. text: 
  721. Issuing an APPEND, CHANGE, EDIT, or READ command when the open
  722. format file does not match the current database will lock the
  723. computer.
  724.  
  725.  
  726. title:  SET FILTER TO WITH GO TOP
  727. version:  10 11 DR
  728. date:  10 Mar 1986
  729. text: 
  730. After a SET FILTER TO is issued, it may be necessary to issue a
  731. GO TOP.  Otherwise, the first record in the file may fall through
  732. (that is, it may not be filtered out) even if it does not satisfy
  733. the filter condition.
  734.  
  735. The commands that do not require a GO TOP are those that
  736. automatically rewind the database file before executing (that is,
  737. any command whose default scope is ALL).  These include AVERAGE,
  738. COUNT, LIST, and SUM.  The commands that allow the first record
  739. to fall through are those that have a scope of NEXT <n>.  These
  740. include ?/??, @...SAY, BROWSE, and DISPLAY.
  741.  
  742.  
  743. title:  SET FILTER TO WITH GO BOTTOM
  744. version:  10 11 DR
  745. date:  10 Mar 1986
  746. text: 
  747. If a SET FILTER TO condition is not satisfied by any records in
  748. the database file and a GO BOTTOM is issued, both the EOF() and
  749. BOF() will return a true (.T.).  Removing the filter by issuing a
  750. SET FILTER TO does not reset EOF() or BOF().  The record pointer
  751. must be repositioned to reset EOF() and BOF().  SKIP or SKIP -1,
  752. however, will return a file boundry error message, because EOF()
  753. and BOF() are true.  To move the record pointer appropraitely
  754. issue a GO TOP and the BOF() and EOF() values will be reset to
  755. false (.F.).
  756.  
  757.  
  758. title:  SET EXACT ON AND INOPERABLE INDEXES
  759. version:  10 11
  760. date:  10 Mar 1986
  761. text: 
  762. SET EXACT ON will render indexes inoperable when the length of
  763. the key expression is not a multiple of four.  SEEK and FIND
  764. will return "No find" even if the string is in the file.  Any
  765. attempt to access an individual record will return "Record is not
  766. in index".  Commands that return this message are GOTO <n>, EDIT
  767. <n>, and <n>, where <n> represents the record number.
  768.  
  769. One work-around for this is to MODIFY STRUCTURE and adjust the
  770. length of the key field to a multiple of four.
  771. Another work-around is to recreate the index and add spaces to
  772. the end of the index key expression to bring it to a multiple of
  773. four.  For example, the following index is created with the
  774. character field, Code, of width six:
  775.    INDEX ON Code + SPACE(2) TO Codendx
  776. The above key expression, Code + SPACE(2), will evaluate to an
  777. index key of eight characters which is a multiple of four.
  778.  
  779.  
  780. title:  SET ESCAPE ON/OFF
  781. version:  10 11 DR
  782. date:  10 Mar 1986
  783. text: 
  784. Ctrl-S will not pause scrolling in dBASE III if ESCAPE is SET OFF.
  785.  
  786.  
  787. title:  SET DELIMITERS ON
  788. version:  10 11
  789. date:  10 Mar 1986
  790. text: 
  791. If you SET DELIMITERS ON, then CREATE or MODIFY a database file
  792. structure, pressing Esc without making any changes will SET
  793. DELIMITERS OFF.
  794.  
  795.  
  796. title:  SET CARRY ON
  797. version:  10 11 DR
  798. date:  10 Mar 1986
  799. text: 
  800. If records are added to a database file with SET CARRY ON and the
  801. last record in the file is marked for deletion, the new records
  802. will also be marked for deletion.  This is true for adding
  803. records with APPEND and BROWSE.
  804.  
  805.  
  806. title:  SET (FULL-SCREEN), USING THE PATH OPTION
  807. version:  10 11
  808. date:  10 Mar 1986
  809. text: 
  810. Under the Disk heading in full-screen SET, the DISK DRIVE SEARCH
  811. PATH is used to set the internal dBASE III path.  If this path
  812. has already been set in Config.DB or by using the dBASE SET PATH
  813. command, the path name will show up when this option is selected.
  814. However, when either Return or Esc is pressed at the selection,
  815. the path name will be erased.  Therefore, if you select the Path
  816. option and do not wish to change it, you must re-enter the path
  817. name.  An alternate way to view the internal dBASE III path name
  818. is to use DISPLAY STATUS.
  819.  
  820. title:  SET (FULL-SCREEN), USING THE INDEX OPTION
  821. version:  10 11
  822. date:  10 Mar 1986
  823. text: 
  824. Under the Files heading in full-screen SET, there is an option to
  825. open INDEX files.  This option neglects to open the selected
  826. index files when used and it will also close all active index
  827. files in the currently selected work area.
  828.  
  829.  
  830. title:  ROUND()
  831. version:  10 11
  832. date:  10 Mar 1986
  833. text: 
  834. The ROUND() function will not round negative numbers correctly.
  835. You can use the following procedures to round off a negative
  836. number:
  837.  
  838.           PROCEDURE Abs   {Absolute value}
  839.           PARAMETERS inval, sign, outval
  840.           IF inval < 0
  841.              sign = (-1)
  842.              outval = (-inval)
  843.           ELSE
  844.              sign = 1
  845.              outval = inval
  846.           ENDIF
  847.           RETURN
  848.  
  849.           PROCEDURE Round   {Round a positive or negative number}
  850.           PARAMETERS inval, outval
  851.           sign = 1
  852.           DO Abs WITH inval, sign, outval
  853.           outval = sign * ( INT( ( outval * 100 ) + .5 ) / 100.00 )
  854.           RETURN
  855.  
  856. Round is used in conjunction with Abs in rounding a number.
  857. Round will round a number to two decimal places.  An example of
  858. how the above procedures would be used is given below.
  859.  
  860.            * ---Assumes Math.prg contains Abs and Round.
  861.            SET PROCEDURE TO Math
  862.            INPUT "Enter number to round :" TO number
  863.            result = 0.0
  864.            DO Round WITH number, result
  865.            ? result
  866.            CLOSE PROCEDURE
  867.  
  868.  
  869. title:  RETURN TO MASTER
  870. version:  10 11
  871. date:  10 Mar 1986
  872. text: 
  873.  
  874.  
  875. title:  REPORT FORM AND MODIFY REPORT
  876. version:  10 11
  877. date:  10 Mar 1986
  878. text: 
  879. (1) A REPORT FORM that is defined with a report width and a left
  880. margin whose difference is exactly 256 causes dBASE III to
  881. display garbage on the screen and/or printer and will require a
  882. warm boot (that is, Ctrl-Alt-Del).  Increasing the width of the
  883. report or decreasing the left margin so that their difference is
  884. greater than 256 corrects this problem, but the report title will
  885. display on several lines instead of just one.  A difference of
  886. 255 or less will properly display the report.
  887.  
  888.  
  889. (2) MODIFY REPORT will allow the number of decimal places to be
  890. changed from the default.  If this is done and the report is
  891. run, everything is as expected.  However, if the report is
  892. modified again, the number of decimal places reverts to the
  893. default when the cursor reaches the "# decimal places" field.
  894.  
  895.  
  896. title:  REPORT FORM WITH STACKED COLUMNS
  897. version:  10 11 DR
  898. date:  10 Mar 1986
  899. text: 
  900. CREATEing a REPORT FORM field that consists of stacked columns
  901. built with the result of the STR() function and numeric fields
  902. may cause numbers to display incorrectly.  Specifically,
  903. entering:
  904.  
  905.      STR( Field1, 5 ) + STR( Field2, 5 )
  906.  
  907. in the field contents and specifying a column width of five will
  908. result in a correct display only when the fields have five-digit
  909. numbers stored in them.  If the number has less than five digits,
  910. the display will be misplaced by the number of digits missing.
  911. The example above will produce:
  912.  
  913.         11111
  914.         11111
  915.  
  916. if the fields are full, but:
  917.  
  918.          1111
  919.         1111
  920.         1111
  921.  
  922. if there are only four digits in the fields.
  923.  
  924.  
  925. title:  REPORT FORM WITH RIGHT MARGIN=REPORT WIDTH
  926. version:  10 11
  927. date:  10 Mar 1986
  928. text: 
  929.    CREATEing a REPORT FORM with a right margin value equal to the
  930. report width (the page width minus the left margin) will display
  931. garbage to the screen or printer.  This happens beacuse there is
  932. no space to print the report.
  933.    There is a general misconception about the meaning of the right
  934. margin in the REPORT FORM.  Some users have the impression that
  935. its value is the number of characters from the left margin, much
  936. the same way a typewriter works.  The value actually refers the
  937. the number of characters the right margin is offset from page
  938. width.
  939.  
  940. For example,
  941.  
  942.      page width    |------------------------------------->|
  943.      right margin                             |<----------|
  944.  
  945.  
  946. title:  REPORT FORM WITH MULTIPLE LINE HEADINGS
  947. version:  10 11
  948. date:  10 Mar 1986
  949. text: 
  950. There is a problem with the REPORT FORM command in printing
  951. multiple line headings.  Sometimes when printing a combination of
  952. character and numeric information, the second and third lines of
  953. the column headings get shifted to the left.  There is no known
  954. work-around for this problem.
  955.  
  956.  
  957. title:  REPORT FORM
  958. version:  10 11 DR
  959. date:  10 Mar 1986
  960. text: 
  961. (1) When using a REPORT FORM to print a Memo field that is longer
  962. than one page, the field will print continuously on the report
  963. with no page breaks.
  964. [1.0, 1.1, D.R.]
  965.  
  966. (2) If the NOEJECT option of the REPORT FORM is used, and the
  967. report does not fill the last page, the line counter is not reset
  968. to zero.  Therefore, when the next report is printed, the first
  969. page of this report will print an incorrect number of lines.
  970. [1.0, 1.1, D.R.]
  971.  
  972. (3) REPORT FORMs with two levels of subtotals that use the eject
  973. after subtotals option will format the first page of the report
  974. differently than all other pages.  The difference is very slight,
  975. but the first page shows the subgroup heading on the line
  976. directly below the major group.  All other pages have a blank
  977. line between the subgroup and the major group headings.
  978. [1.0, 1.1]
  979.  
  980. (4) When creating a report with subtotals, answering yes to the
  981. "Summary report only?  (Y/N)" option can cause one of two known
  982. problems.  The REPORT FORM will either print only the contents of
  983. the fields that are being totaled, or it will lock the system
  984. requiring a cold boot.
  985. [1.0, 1.1]
  986.  
  987.  
  988. title:  REPLACE ALL
  989. version:  10 11
  990. date:  10 Mar 1986
  991. text: 
  992. When used without any arguments, REPLACE ALL will return the
  993. error message "Internal error - illegal op code <no.>." The
  994. database file currently SELECTed will not be affected.  The op
  995. code number and the number of messages vary from machine to
  996. machine.
  997.  
  998.  
  999. title:  REPLACE IN ABBREVIATED FORM
  1000. version:  10 11
  1001. date:  10 Mar 1986
  1002. text: 
  1003. If the REPLACE command is abbreviated, (REPL, REPLA, REPLAC), or
  1004. REPLACE is used without an argument, the result may be the error
  1005. message "illegal op code <no.>." The op code number is not
  1006. relevant and varies from machine to machine.
  1007.  
  1008. This Developer's Release will return the message "1 record
  1009. replaced."
  1010.  
  1011. title:  REPLACE
  1012. version:  10 11
  1013. date:  10 Mar 1986
  1014. text: 
  1015. With SET UNIQUE ON and an index file open, if you REPLACE the key
  1016. field with a non-unique key, then REPLACE the key field again
  1017. without repositioning the record pointer, dBASE III will return
  1018. "No records replaced" and the computer will freeze.
  1019.  
  1020. dBASE III will also freeze the computer if SET UNIQUE is ON and
  1021. you APPEND a BLANK to an indexed file, and then do a REPLACE on
  1022. the key field.  This will occur whether or not the APPENDed
  1023. record is unique or not.
  1024.  
  1025.  
  1026. title:  RELEASE ALL
  1027. version:  10
  1028. date:  10 Mar 1986
  1029. text: 
  1030. There are instances in which the RELEASE ALL command does not
  1031. appear to work.  After executing a DO WHILE loop <n> times (the
  1032. reported instances have occurred at three iterations), the
  1033. message 'Out of memory variable memory' appears, though the
  1034. memory limits are not exceeded.  When RELEASE ALL is replaced
  1035. with CLEAR MEMORY, the problem disappears.
  1036.  
  1037.  
  1038. title:  RECORD AS A RESERVED WORD
  1039. version:  10 11 DR
  1040. date:  10 Mar 1986
  1041. text: 
  1042. Avoid using any word of the form RECORD???? as a field name,
  1043. because it can cause problems with several dBASE III commands.
  1044. Specifically, the error message "Variable cannot be found" will
  1045. occur if this field is used with either the AVERAGE, DISPLAY,
  1046. LIST, REPLACE, or SUM commands.
  1047.  
  1048.  
  1049. title:  RECNO() VALUES
  1050. version:  10 11 DR
  1051. date:  10 Mar 1986
  1052. text: 
  1053. The following section of code shows that the RECNO() function returns
  1054. the number of the last record accessed prior to closing the file.
  1055. Even if the database file is closed, RECNO() retains its last value.
  1056.  
  1057.     USE Names
  1058.     GOTO 7
  1059.     ? RECNO()
  1060.         7
  1061.     USE         <--- Names is closed here.
  1062.     SELECT 2
  1063.     USE Temp
  1064.     ? RECNO()
  1065.         1
  1066.     SELECT 1
  1067.     * ---SELECT 1 has no database file in USE, but
  1068.     * ---RECNO() shows the last record value of
  1069.     * ---Names before it was closed.
  1070.     ? RECNO()
  1071.         7
  1072.  
  1073.  
  1074. title:  PCOL() AND SET MARGIN TO
  1075. version:  10 11
  1076. date:  10 Mar 1986
  1077. text: 
  1078. PCOL() will not return the current printer head position when
  1079. used in conjunction with SET MARGIN TO. Instead, it returns the
  1080. current print position plus the margin offset. For example:
  1081.  
  1082.     STORE "Hello" TO var1
  1083.     STORE "there" to var2
  1084.     SET DEVICE TO PRINT
  1085.     @ 10,0 SAY var1
  1086.     @ PROW(),PCOL()+1 SAY var2
  1087.     SET MARGIN TO 10
  1088.     @ 11,0 SAY var1
  1089.     @ PROW(), PCOL()+1 SAY var2
  1090.     RETURN
  1091.  
  1092. prints the following:
  1093.  
  1094.            Hello there
  1095.            Hello           there
  1096.  
  1097.  
  1098. title:  PARAMETERS
  1099. version:  10 11
  1100. date:  10 Mar 1986
  1101. text: 
  1102. Misspelling the command PARAMETERS or omitting the command in a
  1103. procedure file will produce an irrelevant error message.  The error
  1104. will usually be a syntax error on a command line that looks like a
  1105. RETURN with a right arrow where the "R" should be.  This error will
  1106. also occur if an incorrect number of values are passed in the DO
  1107. <filename> WITH <parameter list> command.  For example:
  1108.  
  1109. * Program..: Areacalc.PRG
  1110.         PARAMATERS length,width,area
  1111. area = length * width
  1112. RETURN
  1113. * EOP: Areacalc.PRG
  1114.  
  1115.  
  1116.         * The following command is entered from the dot prompt.
  1117. DO Areacalc WITH 6,4,0
  1118.  
  1119. Syntax Error
  1120.  ?
  1121.  
  1122. A space following a memory variable in a PARAMETERS statement
  1123. will return the "Unrecognized phrase/keyword in command" error
  1124. message.  The following command sequence demonstrates this
  1125. anomaly.
  1126.  
  1127. * Test.PRG
  1128.          PARAMETERS name
  1129.          name = "Steve" ^-------------there is a blank
  1130.          RETURN                       space after "name".
  1131.  
  1132.          . mvar = "John"
  1133.          . DO test WITH mvar
  1134. Unrecognized phrase/keyword in command
  1135. ?
  1136. PARAMETERS name
  1137.  
  1138.  
  1139. title:  NUMERIC ACCURACY INCONSISTENCIES
  1140. version:  10 11
  1141. date:  10 Mar 1986
  1142. text: 
  1143. There are some inconsistencies with the manner in which dBASE III
  1144. handles numeric operations, especially comparisons.  What follows
  1145. are two examples that return unexpected results.
  1146.  
  1147. EXAMPLE 1:
  1148.  
  1149.      . ? 4.1 - 2.1
  1150.       2.0
  1151.      . ? INT(4.1 - 2.1) = 2
  1152.      .F.
  1153.      . ? INT(4.1 - 2.1)
  1154.         1
  1155.  
  1156. EXAMPLE 2:
  1157.  
  1158.      . ? SQRT(100)
  1159.           10.00
  1160.      . ? SQRT(100) = 10
  1161.      .F.
  1162.      . ? INT(SQRT(100)) = 10
  1163.      .F.
  1164.      . ? INT(SQRT(100))
  1165.               9
  1166.  
  1167. The only reliable way to compare two numbers in dBASE III is to
  1168. use the STR() function.  For example:
  1169.  
  1170.      . ? STR(SQRT(100),10,2) = STR(10,10,2)
  1171.      .T.
  1172.  
  1173.  
  1174. title:  MODIFY STRUCTURE
  1175. version:  11
  1176. date:  10 Mar 1986
  1177. text: 
  1178. It has been reported that MODIFY STRUCTURE will occasionally
  1179. write a 00H in the delete marker position of a group of records
  1180. in a database file, causing those records to be shifted one
  1181. character to the right on LIST and DISPLAY.  The records will
  1182. appear normal with other commands such as EDIT and REPORT FORM.
  1183.  
  1184. To date, this problem has only been reported on the IBM PC AT.
  1185.  
  1186. If it occurs, DELETE and RECALL the offending records to restore
  1187. the delete marker to its normal state, a 20H.  (For more
  1188. information on data record structures, see page D3-15.)  For
  1189. example:
  1190.  
  1191.      . USE Bad_file
  1192.      . LIST
  1193.  
  1194.      Record#  NAME       CODE  PHONE
  1195.            1  Joe        AAA   (111)111-1111
  1196.            2   Mary       BBB   (222)222-2222
  1197.            3   Tom        CCC   (333)333-3333
  1198.            4   Alice      DDD   (444)444-4444
  1199.            5  Betty      EEE   (555)555-5555
  1200.  
  1201.      . GOTO 2
  1202.      . DELETE NEXT 3
  1203.            3 records deleted
  1204.      . GOTO 2
  1205.      . RECALL NEXT 3
  1206.  
  1207.            3 records recalled
  1208.      . LIST
  1209.  
  1210.      Record#  NAME       CODE  PHONE
  1211.            1  Joe        AAA   (111)111-1111
  1212.            2  Mary       BBB   (222)222-2222
  1213.            3  Tom        CCC   (333)333-3333
  1214.            4  Alice      DDD   (444)444-4444
  1215.            5  Betty      EEE   (555)555-5555
  1216.  
  1217.  
  1218. title:  MODIFY REPORT
  1219. version:  10 11
  1220. date:  10 Mar 1986
  1221. text: 
  1222. There is a problem in the REPORT FORM concerning the width of the
  1223. column.  Specifically, if a change in the field contents affects
  1224. the column width, the field width will reflect the change.
  1225. However, if the new value is not explicitly re-entered, the width
  1226. will revert to the old value when another column is accessed or
  1227. CREATE/MODIFY REPORT is exited.
  1228.  
  1229. The REPORT FORM in the Developer's Release has been changed to
  1230. rectify this problem.  When a field's contents are changed, the
  1231. column width will reflect the change only if the column width is
  1232. increased.  However, unlike versions 1.0  and 1.1, all changes to
  1233. the column width are saved when CREATE/MODIFY REPORT is exited.
  1234.  
  1235.  
  1236. title:  MODIFY COMMAND (DEVELOPER'S RELEASE)
  1237. version:  DR
  1238. date:  10 Mar 1986
  1239. text: 
  1240. In the Developer's Release, graphic characters will appear if you
  1241. press Ctrl-@, Ctrl-C, or PgDn on the first line of text in MODIFY
  1242. COMMAND.  These characters are easily removed by editing.
  1243.  
  1244.  
  1245. title:  MEMO FIELDS, LISTING OR PRINTING AFTER A PREVIOUS FIELD
  1246. version:  10 11 DR
  1247. date:  10 Mar 1986
  1248. text: 
  1249. A problem displaying memo fields has been found in dBASE III by
  1250. one of our users.  The problem occurs when you try to list or
  1251. print a memo field preceded by a field whose length will force
  1252. the first line of the memo field to wrap around one or more
  1253. times.
  1254. Assume a file structure consisting of two fields:
  1255.  
  1256.  
  1257.      Structure for database: Example.DBF
  1258.  
  1259.      Field  Field Name  Type       Width    Dec
  1260.          1  Field1      Character    100
  1261.          2  Field2      Character     70
  1262.          3  Comments    Memo          10
  1263.      ** Total **                     181
  1264.  
  1265. These display commands
  1266.  
  1267.      ? SPACE( 1 ), Comments
  1268.      ? Field1, Comments
  1269.      ? Field2, Comments
  1270.      ? Field1, Field2, Comments
  1271.  
  1272. will all produce different results.
  1273.  
  1274. If the total length of the fields preceding the memo field is 29
  1275. or above, the first line of the memo field will wrap around.  The
  1276. entire memo field will then be displayed in double space.
  1277. Futhermore, if the total length of the fields preceding the memo
  1278. field is long enough to force the first line of the memo field to
  1279. be displayed starting on the second line of the display, then the
  1280. entire memo field will be displayed in triple space.
  1281.  
  1282.  
  1283. title:  MEMO FIELDS, DISPLAYED FROM AN UNSELECTED AREA
  1284. version:  10 11 DR
  1285. date:  10 Mar 1986
  1286. text: 
  1287. An attempt to display a memo field from an unSELECTed work area will
  1288. produce the error message "Unrecognized phrase/keyword in command".
  1289. For example:
  1290.  
  1291.     SELECT A
  1292.     USE First
  1293.     SELECT B
  1294.     * ---The following database file has the character
  1295.     * ---field 'Name' and a memo field 'Notes'.
  1296.     USE Second
  1297.     SELECT A
  1298.     ? Second->Name   <--- This works correctly.
  1299.     *
  1300.     * ---The following line returns the error message,
  1301.     * ---"Unrecognized phrase/keyword in command".
  1302.     ? Second->Notes
  1303.     *
  1304.     * ---The following line returns,
  1305.     * ---"No database in USE, enter filename:"
  1306.     LIST Second->Notes
  1307.  
  1308.  
  1309. title:  LOAD (DEVELOPER'S RELEASE)
  1310. version:  DR
  1311. date:  10 Mar 1986
  1312. text: 
  1313. LOADable files must have filenames seven characters or less in
  1314. length.  Files having a names of eight characters will not be
  1315. LOADed correctly.
  1316. For example:
  1317.  
  1318.    LOAD Diskread
  1319.    CALL Diskread
  1320.  
  1321. will return:
  1322.  
  1323.    File was not LOADed.
  1324.  
  1325. when the CALL command is executed.  The LOAD command
  1326. produces no error message.  If the filename above is changed to
  1327. Dskread.BIN, the file is LOADed properly.
  1328.  
  1329.  
  1330. title:  LABEL LIMITATIONS
  1331. version:  10 11
  1332. date:  10 Mar 1986
  1333. text: 
  1334. Certain LABEL forms lock up the system.  This seems to happen
  1335. with forms of 13 or more lines.  Shorter forms will not print
  1336. the last few lines when these lines contain a lot of text.
  1337.  
  1338.  
  1339. title:  JOIN WITH FILES CONTAINING MEMO FIELDS
  1340. version:  10 11
  1341. date:  10 Mar 1986
  1342. text: 
  1343. The following anomalies may arise when JOINing database files
  1344. that contain memo fields.
  1345.  
  1346. 1) JOIN will not create the .DBT file for the target database when the
  1347. active database file (that is, the file currently SELECTed) contains
  1348. the memo field. The error message, "Memo file cannot be opened" will
  1349. display when you attempt to USE the target file.
  1350.  
  1351. 2) If the JOIN is executed with the FIELDS clause and the memo field
  1352. is omitted, the target file will display the error message, "Memo file
  1353. cannot be opened" when the target file is USEd.
  1354.  
  1355. 3) If the file being JOINed WITH (that is, the un-SELECTed file) has a
  1356. memo field and the active file does not, a .DBT file will be created
  1357. for the target file, but the data contained in the memo field will not
  1358. be transferred.
  1359.  
  1360. Currently, there is no way to get the JOIN command to transfer memo
  1361. field information into the target file.  One work-around is to use the
  1362. S-Join.PRG program which simulates the JOIN command with COPY and
  1363. APPEND, and allows memo fields to be joined to the target file.
  1364. (S-Join.PRG is in the February, 1985, issue of TechNotes, page D3-7.)
  1365. If you do not want the memo fields copied
  1366. over, COPY the active database file to another file using the FIELDS
  1367. clause that does not include the memo field, USE that file, and then
  1368. execute the JOIN.
  1369.  
  1370.  
  1371. title:  INKEY()
  1372. version:  DR
  1373. date:  10 Mar 1986
  1374. text: 
  1375. The INKEY() function of the Developer's Release does not always
  1376. read the leftarrow key as CHR(19).  Running the following program
  1377. will demonstrate that dBASE III will trap this key only rarely.
  1378.  
  1379.      i = 0
  1380.      DO WHILE i <> 13
  1381.        i = INKEY()
  1382.        ? i
  1383.      ENDDO
  1384.  
  1385. When you run this program, you will notice that dBASE III treats
  1386. the leftarrow key as a Ctrl-S, and will pause or start scrolling
  1387. accordingly.  Sometimes the key will be trapped and INKEY() will
  1388. return 19; however, this is far less common than the former
  1389. result.
  1390.  
  1391.  
  1392. title:  version:  date:  text: 
  1393.  
  1394.  
  1395. title:  INDEXING WITH STR() OR SUBSTR() FUNCTIONS
  1396. version:  10 11 DR
  1397. date:  10 Mar 1986
  1398. text: 
  1399. Although the length argument of the STR() and SUBSTR() functions
  1400. is optional, it must be included when either of these functions
  1401. is used as part of an INDEX expression.  Otherwise, the error
  1402. message "Record is not in index" will occur when using either
  1403. BROWSE, EDIT or GO/GOTO.
  1404.  
  1405.  
  1406. title:  INDEX WITH SET UNIQUE ON
  1407. version:  10 11 DR
  1408. date:  10 Mar 1986
  1409. text: 
  1410. INDEXing on a numeric field with SET UNIQUE ON may produce an
  1411. incorrect count on the screen display.  The actual index file is
  1412. correct.  The counter will be correct if you INDEX use the
  1413. STR(fieldname,length).
  1414.  
  1415.      USE Test
  1416.      DISPLAY STRUCTURE
  1417.  
  1418.      Number of data records:  608
  1419.      Field, Field name, Type,   Width,    Dec
  1420.          1  One         Numeric     4       0
  1421.          2  Two         Character   5
  1422.          3  Three       Character   5
  1423.      ** Total **                   15
  1424.  
  1425.      SET UNIQUE ON
  1426.      INDEX ON One TO Test
  1427.           536 records indexed   *  incorrect count
  1428.  
  1429.      INDEX ON STR(One,4) TO Test1
  1430.           42 records indexed    *  correct count
  1431.  
  1432.  
  1433. title:  INDEX AND BLANK DATES
  1434. version:  10 11 DR
  1435. date:  10 Mar 1986
  1436. text: 
  1437. A database file that is INDEXed on a date field will put blank
  1438. dates at the bottom rather than the top of the index file.  To
  1439. work around this problem, use the following index expression
  1440. instead of the date field:
  1441.  
  1442.      INDEX ON STR(YEAR(Date),4) + STR(MONTH(Date),2);
  1443.             + STR(DAY(Date),2) TO <filename>
  1444.  
  1445. Using this expression, you will also be able to INDEX on date and
  1446. character fields simultaneously.  For example:
  1447.  
  1448.      INDEX ON STR(YEAR(Date),4) + STR(MONTH(Date),2);
  1449.             + STR(DAY(Date),2) + Last_name TO <filename>
  1450.  
  1451. This command will create an index file that is in chronological
  1452. order by Date and in alphabetical order by Last_name.
  1453.  
  1454.  
  1455. title:  FIND &MEMVAR WITH TRAILING BLANKS
  1456. version:  10 11
  1457. date:  10 Mar 1986
  1458. text: 
  1459. FIND &memvar will return "No find" if there are trailing spaces
  1460. following the memory variable.  This occurs if the FIND is in a
  1461. command file or issued at the dot prompt.  Trailing blanks are
  1462. concatenated to a macro when the FIND command is used.  With the
  1463. additional trailing blanks, the new character string might not be
  1464. found.  The following example uses a data file with the field
  1465. NAME-C-10, indexed on this field, and a record with "RALPHxxxxx"
  1466. in the Name field.  The character "x" represents a blank.
  1467.  
  1468.      STORE "RALPH" TO memvar
  1469.      FIND &memvar<cr>              (This FINDs record 1)
  1470.      FIND &memvarx<cr>             (Still OK - "RALPHx"is record 1)
  1471.      FIND &memvarxxxxxx<cr>        (No find - 6 trailing blanks
  1472.                                    exceeds field width)
  1473.  
  1474. If less than the entire string is searched for, FIND will never
  1475. work with the trailing blank.  For example:
  1476.  
  1477.      STORE "RAL" TO memvar
  1478.      FIND &memvar<cr>              (This finds record 1)
  1479.      FIND &memvarx<cr>             (No find - "RALx" is not in
  1480.                                    the file)
  1481.  
  1482. The workaround is to use the SEEK command.  For example,
  1483.  
  1484.      SEEK memvar
  1485.  
  1486.  
  1487. title:  EXPONENTIATION DISPLAY
  1488. version:  10 11 DR
  1489. date:  10 Mar 1986
  1490. text: 
  1491. When raising an expression to a power in dBASE III, an overflow
  1492. condition will arise if both the exponent and the expression are
  1493. literal numbers greater than or equal to 10.  For example:
  1494.  
  1495.      . ? 10^10
  1496.      *************
  1497.  
  1498. To work around this problem, STORE either the expression or the
  1499. exponent to a memory variable.  For example:
  1500.  
  1501.      . num = 10
  1502.      . ? 10^num
  1503.               10000000000.00
  1504.  
  1505.  
  1506. title:  EJECT AND SET PRINT ON WITH PRINTER OFF-LINE
  1507. version:  10 11 DR
  1508. date:  10 Mar 1986
  1509. text: 
  1510. EJECT and SET PRINT ON may lock the computer if the printer is not
  1511. activated.  The dBASE III User Manual warns that this may happen in
  1512. the command section under both of these commands.
  1513.  
  1514. If the printer power is on but the printer is off-line, issuing a
  1515. <command> TO PRINT will give the following error message:
  1516.  
  1517.     Write fault error writing device PRN
  1518.     Abort, Retry, Ignore?
  1519.  
  1520. This is an MS-DOS error message.  Therefore, if you Abort, you will
  1521. leave dBASE III and be left at the operating system level.  The proper
  1522. way to recover is to put the printer on-line and then Retry.
  1523.  
  1524. title:  EDIT
  1525. version:  10 11 DR
  1526. date:  10 Mar 1986
  1527. text: 
  1528. If BROWSE is used on an indexed file and is terminated with a
  1529. Ctrl-Q or Ctrl-W and followed with an EDIT command, keys which
  1530. advance or regress through the database file (PgUp,
  1531. PgDn, uparrow, downarrow, Ctrl-E, Ctrl-R, Ctrl-C) will not work
  1532. properly.
  1533.  
  1534. Sometimes these keys will drop the user out of EDIT to the dot
  1535. prompt.  Other times they will move two or three records instead
  1536. of one.  The display will sometimes lock on the current record.
  1537. These keys may also cause the pointer to be positioned at
  1538. the next to last record in the index.
  1539.  
  1540.  
  1541. title:  DO WHILE WITH AN EXTRA ENDDO
  1542. version:  10
  1543. date:  10 Mar 1986
  1544. text: 
  1545. If an extra ENDDO is added to a command file, an infinite loop
  1546. will result.  For example, the following program will execute
  1547. until Esc is pressed:
  1548.  
  1549.         number = 0
  1550.         DO WHILE number < 10
  1551.            @ 10,10 SAY "Now at loop " + STR(number,2)
  1552.            STORE number + 1 TO number
  1553.         ENDDO
  1554.         ENDDO           <--- This ENDDO has no matching DO WHILE.
  1555.         RETURN
  1556.  
  1557. We recommend you use some method of indentation for the control
  1558. structures: DO CASE...ENDCASE, DO WHILE...ENDDO, and IF...ENDIF
  1559. to avoid this problem.  This practice will make command files
  1560. more readable, and will allow for quick visual checking for
  1561. accuracy of nested control structures.  In our example, two
  1562. consecutive ENDDO statements with the same left margin is a
  1563. definite indication that something is wrong.
  1564.  
  1565. When using the command DISPLAY OFF in conjunction with TO PRINT
  1566. and no specified scope in a command file, the DISPLAY will have
  1567. an extra line-feed between each line.  For example:
  1568.  
  1569. SET HEADING OFF
  1570. DO WHILE .NOT. EOF()
  1571.    DISPLAY OFF <Field1>, <Field2> TO PRINT
  1572.    SKIP
  1573. ENDDO
  1574.  
  1575. will yield:
  1576.  
  1577. <value1> <value2>
  1578.                         <----------- extra line-feed
  1579. <value1> <value2>          |
  1580.                    <-------
  1581. <value1> <value2>
  1582.  
  1583.  
  1584. title:  DO WHILE WITH RETURN
  1585. version:  10 11 DR
  1586. date:  10 Mar 1986
  1587. text: 
  1588. A RETURN statement inside a DO WHILE...ENDDO construction will
  1589. not close the DO WHILE <condition> in the program as it does in
  1590. dBASE II.  Therefore, the <condition> will continue to be
  1591. evaluated.  For example:
  1592.  
  1593.      * A.PRG
  1594.      expA = "1"
  1595.      DO WHILE expA = "1"
  1596.         ? "Hi!"
  1597.         DO B     --------------->  * B.PRG
  1598.      ENDDO                         expB = "2"
  1599.      * EOF: A.PRG                  DO WHILE expB = "2"
  1600.                                       ? "How are you?"
  1601.                                       expA = "X"
  1602.                                       RETURN
  1603.                                    ENDDO
  1604.                                    * EOF: B.PRG
  1605.  
  1606. Executing A.PRG will cause an infinite loop.  It appears dBASE
  1607. III continues to test the condition of expB.  In order to work
  1608. around this, B.PRG should be written as follows:
  1609.  
  1610.           * B.PRG (revised).
  1611.           expB = "2"
  1612.           DO WHILE expB = "2"
  1613.              ? "How are you?"
  1614.              expA = "X"
  1615.              EXIT             <----- Notice, the EXIT here,
  1616.           ENDDO
  1617.           RETURN              <----- and the RETURN here.
  1618.           * EOF: B.PRG
  1619.  
  1620.  
  1621. title:  DO WHILE WITH SEMICOLON
  1622. version:  10 11
  1623. date:  10 Mar 1986
  1624. text: 
  1625. When a DO WHILE conditional statement is continued to a second
  1626. line with a semicolon, dBASE III tries to execute this second
  1627. line the second time through the loop.  When the ENDDO is
  1628. encountered and the condition evaluates as true, program flow
  1629. proceeds to this second line, resulting in the error message,
  1630.  
  1631. "*** Unrecognized command verb."  For example:
  1632.  
  1633.           * ---This program will give an error message
  1634.           * ---when "Y" is entered at the WAIT prompt.
  1635.           answer = 'Y'
  1636.           number = 1
  1637.           DO WHILE number < 10;
  1638.              .AND. answer = 'Y'
  1639.              ? number
  1640.              WAIT '"Y" to continue ' TO answer
  1641.              number = number + 1
  1642.           ENDDO
  1643.  
  1644. If "Y" is entered at the WAIT prompt, dBASE III tries to execute
  1645. ".AND. answer = 'Y'."  However, if the semicolon is deleted and
  1646. the line is allowed to wrap at column 67 in MODIFY COMMAND,
  1647. execution flows correctly.
  1648.  
  1649.  
  1650. title:  DO WHILE WITH RESTORE
  1651. version:  10 11 DR
  1652. date:  10 Mar 1986
  1653. text: 
  1654. If a memory variable tested in a DO WHILE loop is recreated in
  1655. the loop by RESTOREing the variable FROM a memory file, the loop
  1656. will continue to run even after the condition no longer evaluates
  1657. as true (.T.).  The program below will run endlessly as long as
  1658. the control variable is not the first entry in the memory file:
  1659.  
  1660.      var = .T.
  1661.      DO WHILE var
  1662.         RESTORE FROM Memfile <--- This overwrites var at the
  1663.                                   same memory location.
  1664.         var = .F.            <--- This change is ignored if
  1665.      ENDDO                        the previous assignment
  1666.                                   statement changed the
  1667.                                   memory location of the
  1668.                                   variable.
  1669.  
  1670. RESTOREing ADDITIVE ameliorates the problem.
  1671.  
  1672.  
  1673. title:  DO COMMAND FILE IN PROCEDURE ON TI PROFESSIONAL
  1674. version:  11
  1675. date:  10 Mar 1986
  1676. text: 
  1677. With a procedure file open, attempting to DO  any command file
  1678. will result in a "*** Syntax error ***."  For example,
  1679. the command file below will produce the error.
  1680.  
  1681.      SET PROCEDURE TO Test1
  1682.      DO Routine <---------------- Routine is a procedure
  1683.      DO Nonproc <-------------|   in Test1.
  1684.      RETURN                   |
  1685.                               |-- This is a separate
  1686.                                   command file.
  1687.  
  1688. DO Routine will execute; however, DO Nonproc will produce  the
  1689. error message.  This problem has been reported on the TI PRO
  1690. version of dBASE III only.  This will not produce an error on the
  1691. IBM PC version.
  1692.  
  1693.  
  1694. title:  CTOD()
  1695. version:  10 11
  1696. date:  10 Mar 1986
  1697. text: 
  1698. If a date type memory variable is created with a blank date and
  1699. the month contains less than two spaces, the result will be
  1700. 11/30/99.  This occurs only if the month positions are incorrect.
  1701. If the day and year positions are incorrectly initialized, the
  1702. result is the expected,   /  /  .
  1703.  
  1704. Month position incorrect:
  1705.  
  1706.     date = CTOD(" / / ")
  1707.                  ^             One space instead of two.
  1708. The result:   11/30/99
  1709.  
  1710. Day and year positions incorrect:
  1711.  
  1712.    date = CTOD("  //")
  1713.  
  1714. The result:     /  /
  1715.  
  1716.  
  1717. title:  CREATE AND ALIAS
  1718. version:  10 11
  1719. date:  10 Mar 1986
  1720. text: 
  1721. After you CREATE a file, you must USE it again in order to
  1722. establish the file name as the default alias name.  Otherwise,
  1723. the file name will have no alias name assigned to it.  For
  1724. example:
  1725.  
  1726.      CREATE File_one
  1727.      * ---Enter file structure.
  1728.      * ---Add a few records.
  1729.      DISPLAY STATUS
  1730.      * ---No alias name appears.
  1731.      SELECT 2
  1732.      USE New_file
  1733.      SELECT File_one
  1734.      * ---Gives "Alias not found" message.
  1735.  
  1736.  
  1737. title:  CREATE <FILENAME>
  1738. version:  10 11 DR
  1739. date:  10 Mar 1986
  1740. text: 
  1741. (1) In dBASE III, a legitimate file name may contain up to eight
  1742. characters consisting of an initial letter, and any combination
  1743. of letters, numbers, and underscores.  However, special
  1744. characters ($,#,-,@,+,etc.) in the name will cause an error
  1745. message if an <Alias> -> <Fieldname> is used.  For example:
  1746.  
  1747.      USE Names
  1748.      SELECT 2
  1749.      USE Test-it
  1750.      SELECT Names
  1751.      ? Test-it -> Fieldname
  1752.      Variable not found
  1753.             ?
  1754.      ? Test-it -> Fieldname
  1755.  
  1756. (2) When creating a database file, if <RETURN> is pressed in the
  1757. first field of the screen and editing is then resumed by pressing
  1758. any key other than <RETURN>, the structure of the file saved will
  1759. be corrupted.  LISTing the STRUCTURE may lock the machine.
  1760. [1.0, 1.1]
  1761.  
  1762.  
  1763. title:  COPY TO <FILENAME> SDF
  1764. version:  10 11
  1765. date:  10 Mar 1986
  1766. text: 
  1767. If the database file being copied has a MEMO field, the data in
  1768. the fields following the MEMO field will either not be copied or
  1769. will be copied incorrectly.
  1770.  
  1771. To work around this problem, use the FIELDS phrase in the COPY
  1772. command.  For example:
  1773.  
  1774.       COPY TO <filename> FIELDS <field list> SDF
  1775.  
  1776.  
  1777. title:  COPY TO <FILENAME> DELIMITED WITH WITHOUT DELIMITER
  1778. version:  10 11
  1779. date:  10 Mar 1986
  1780. text: 
  1781. Using COPY TO <filename> DELIMITED WITH without a delimiter is
  1782. not trapped as an error and will cause one of two problems: (1)
  1783. if there is a space after the WITH, the error "Unrecognized
  1784. phrase/keyword in command" is displayed; (2) if there is no
  1785. space, the file is copied but the target file will contain all
  1786. blank records.
  1787.    This problem was discovered in an attempt to build a comma
  1788. separated file in which the character strings were not enclosed
  1789. in delimiters.  Currently, the COPY command does not have this
  1790. capability.  You can, however, create a comma separated file in
  1791. which the character strings are delimited with a blank.  The
  1792. syntax is:
  1793.  
  1794.           COPY TO <filename> DELIMITED WITH BLANK
  1795.  
  1796.  
  1797. title:  COPY TO <FILENAME> DELIMITED
  1798. version:  10 11
  1799. date:  10 Mar 1986
  1800. text: 
  1801. If a database file structure contains a large number of character or
  1802. numeric fields with a length of one, the COPY TO <filename>
  1803. DELIMITED command will produce unreliable results.  For example, a
  1804. file with 29 one-character fields will produce a text file with the
  1805. following record:
  1806.  
  1807.      1,"A","A","A",1,1,"A","A","A","A","A",1,1,1,1,1,1/
  1808.      ,"A","A","A",",",",,,",","
  1809.  
  1810. The last fields in the record have been garbled.
  1811.  
  1812.  
  1813. title:  COPY [STRUCTURE] TO <FILENAME> WITH SET SAFETY
  1814. version:  10 11
  1815. date:  10 Mar 1986
  1816. text: 
  1817. The COPY [STRUCTURE] TO <filename> command ignores the status of
  1818. SET SAFETY if it is issued in a command file.  It will overwrite
  1819. the target database file without warning.  There are two
  1820. work-arounds for this problem.  The first work-around is to use
  1821. the COPY FILE command instead.  You will have to CLOSE the source
  1822. database before this command can be used.  The other work-around
  1823. is to use the FILE() function to check for the existence of the
  1824. target file before issuing the COPY TO command.  For example:
  1825.  
  1826.     overwrite = .F.
  1827.     IF FILE( "Temp.DBF" )
  1828.         @ 10,0 SAY "File already exists, overwrite it?  (Y/N)";
  1829.         GET overwrite
  1830.         READ
  1831.     ELSE
  1832.         overwrite = .T.
  1833.     ENDIF
  1834.     IF overwrite
  1835.         COPY TO Temp
  1836.     ENDIF
  1837.  
  1838.  
  1839. title:  CONFIG.DB WITH TEDIT OR WP
  1840. version:  10 11
  1841. date:  10 Mar 1986
  1842. text: 
  1843. Config.db will not accept more than eight characters for WP
  1844. or TEDIT.  Any more than eight will be truncated.  Attempting to
  1845. use MODIFY COMMAND (or to edit a MEMO field) will briefly display
  1846. the operating system message "Bad command or file name" and drop
  1847. the user to the dBASE dot prompt (or to the edit screen).  dBASE
  1848. III warns the user that the filename is truncated when dBASE is
  1849. initialized.  For example:
  1850.  
  1851.      TEDIT=B:DFORMAT
  1852.                     ^--- truncated
  1853.  
  1854. To work around this problem, place the word processor in the same
  1855. drive and directory or rename the wordprocessor with fewer
  1856. characters.
  1857.  
  1858.  
  1859. title:  CONFIG.DB WITH SCOREBOARD
  1860. version:  10 11
  1861. date:  10 Mar 1986
  1862. text: 
  1863. The entry SCOREBOARD=OFF has no effect if set in CONFIG.DB.
  1864. SETing the SCOREBOARD OFF suppresses the display of status and
  1865. error messages to line 0 .  The SCOREBOARD setting can only be
  1866. changed from a command file or the dot prompt with the command
  1867. SET SCOREBOARD OFF.
  1868.  
  1869.  
  1870. title:  CLOSE PROCEDURE
  1871. version:  10 11 DR
  1872. date:  10 Mar 1986
  1873. text: 
  1874. If CLOSE PROCEDURE is included inside a procedure file, the
  1875. procedure will stop running.  The correct place to include the
  1876. CLOSE PROCEDURE command is inside the calling program.
  1877.  
  1878.  
  1879. title:  CTRL-C WHILE PRINTING
  1880. version:  10 11
  1881. date:  10 Mar 1986
  1882. text: 
  1883. If Ctrl-C is pressed while dBASE III is printing, the user is returned
  1884. to the operating system.  LIST TO PRINT, DISPLAY TO PRINT, and
  1885. operations performed with SET PRINT ON and REPORT FORM TO PRINT are
  1886. affected in this way.
  1887.  
  1888.  
  1889. title:  BROWSE
  1890. version:  10 11
  1891. date:  10 Mar 1986
  1892. text: 
  1893. It appears that dBASE III does not release the memory used by
  1894. BROWSE when the command is terminated.  As a result, using many
  1895. consecutive BROWSE commands will cause dBASE III to run out of
  1896. memory and display the error message "Insufficient memory."  The
  1897. exact number will depend on how much memory is available.  Once
  1898. the error message occurs, the only way around the problem is to
  1899. QUIT out of dBASE.  CLEAR MEMORY will not solve the problem.
  1900.  
  1901.  
  1902. title:  BROWSE, APPENDING IN
  1903. version:  10 11 DR
  1904. date:  10 Mar 1986
  1905. text: 
  1906. Records seem to disappear when you use the APPEND option in BROWSE.  To see
  1907. this, go into BROWSE, then add a record, butdo not fill in all of the fields.
  1908. The record number of the status line will be <n>.  Press PgDn to add another
  1909. record.  The record previously added disappears and the record number will be
  1910. one less than the previous number.  Fill in some of the fields again, but this
  1911. time press Return through therest of the fields.Check the record number, then
  1912. press the Up Arrow key, then PgDn, and the missing record reappears with the
  1913. proper record number restored.
  1914.  
  1915.  
  1916. title:  AVERAGE PRODUCES LINEFEEDS
  1917. version:  10 11
  1918. date:  10 Mar 1986
  1919. text: 
  1920. See SUM.
  1921.  
  1922.  
  1923. title:  ASSIST WITH EXACTLY 27 FIELDS
  1924. version:  10 11
  1925. date:  10 Mar 1986
  1926. text: 
  1927. Choosing an option in ASSIST that allows a FOR/WHILE clause
  1928. (AVERAGE, DISPLAY, REPORT, etc...) on a database of exactly 27
  1929. fields, will not allow the last several fields to be used as part
  1930. of the FOR/WHILE clause if the down arrow key is used to access
  1931. those fields.  Everything will appear fine until the last group
  1932. of fields is displayed on the screen, at which point pressing the
  1933. down arrow will take you to the next menu screen.
  1934.  
  1935. Note that this anomaly only occurs on a database file with
  1936. exactly 27 fields.  It is possible to access the last several
  1937. fields by way of the PgDn and down arrow keys; but, it is much
  1938. easier to MODIFY the STRUCTURE of the database file to add
  1939. another field which avoids the problem altogether.
  1940.  
  1941.  
  1942. title:  ASSIST
  1943. version:  10 11
  1944. date:  10 Mar 1986
  1945. text: 
  1946. If the status of SET INTENSITY is OFF, ASSIST will be difficult
  1947. to use.  This is due to the fact that ASSIST relies on the
  1948. options being in reverse video and yet neglects to change the
  1949. status of the intensity parameter.
  1950.  
  1951.  
  1952. title:  APPEND FROM
  1953. version:  10 11 DR
  1954. date:  10 Mar 1986
  1955. text: 
  1956. (1) When using the APPEND FROM command, if the SDF file which is being
  1957. read in has a 00 hex, any data for that record which appears after the
  1958. 00 hex will not be added.  If each record starts with a 00 hex,
  1959. records will be APPENDed but they will all be blank.
  1960.  
  1961. (2) If you APPEND FROM a DELIMITED text file that contains a space
  1962. after a numeric field and before the comma, a zero will appear in the
  1963. field following the numeric field.  The blank space is apparently read
  1964. as a separate field with a value of zero.
  1965.    Please note that Framework version 1.0 generates a text file of this
  1966. format, which will be APPENDed incorrectly by dBASE III.  Framework
  1967. version 1.1 no longer terminates numeric fields in a text file with
  1968. blanks.  Such files will be APPENDed correctly by dBASE III.
  1969. [1.0, 1.1]
  1970.  
  1971.  
  1972. title:  APPEND WITH A FORMAT FILE
  1973. version:  10 11
  1974. date:  10 Mar 1986
  1975. text: 
  1976. Attempting a full-screen APPEND with a format file that does not match
  1977. the database file will occasionally hang the computer or return the
  1978. user to the dot prompt.
  1979.  
  1980.  
  1981. title:  APPEND
  1982. version:  10 11
  1983. date:  10 Mar 1986
  1984. text: 
  1985. dBASE III allows the user to move back into previously existing
  1986. records when using the interactive APPEND.  If an index file is
  1987. in use and key fields are edited in this manner,the index is no
  1988. updated with the new key field values.  The database file will
  1989. have to be REINDEXed.
  1990.  
  1991.  
  1992. title:  APPEND (OR INSERT)
  1993. version:  10 11 DR
  1994. date:  10 Mar 1986
  1995. text: 
  1996. (1) If a file has so many fields that it requires more than one
  1997. screen during full-screen APPEND (or INSERT), pressing Return in
  1998. response to a numeric field on any screen other than the first
  1999. will not display a zero in that field.  This is strictly a
  2000. cosmetic problem that will manifest itself only in the
  2001. full-screen mode.  That is, if you use CHANGE or EDIT, the field
  2002. will appear blank, but ?, DISPLAY, and LIST will display the
  2003. field as a zero.
  2004.  
  2005. (2) When using full-screen APPEND (or INSERT), issuing a Ctrl-W
  2006. or a Ctrl-End in the first character of a blank record will write
  2007. the record to the file before leaving the full-screen mode.  This
  2008. is inconsistent with the original version (1.00) of the product.
  2009.  
  2010. To work around this problem, use either Return, Ctrl-Q, or Esc to
  2011. exit the full-screen mode.
  2012.  
  2013.  
  2014. title:  ADDITION
  2015. version:  10 11
  2016. date:  10 Mar 1986
  2017. text: 
  2018. Adding 50 or more numbers together in a single command line will lock the
  2019. computer, requiring a cold boot.  For example, the command ?  1+1+1...+N,
  2020. where N is the 50th number, will produce the correct answer, then freeze the
  2021. computer.
  2022.  
  2023.  
  2024. title:  ?? COMMAND
  2025. version:  10 11
  2026. date:  10 Mar 1986
  2027. text: 
  2028. Outputting a memo field with the ?? command in a program
  2029. may produce undesirable results.  The first time the command
  2030. is encountered, the memo field will display correctly.
  2031. Thereafter, only the first line of the memo field will
  2032. display correctly.  All subsequent lines will be offset to
  2033. the right.  For example, this program:
  2034.  
  2035.            DO WHILE .NOT. EOF()
  2036.               USE Test
  2037.               ?? Memo_fld
  2038.               SKIP
  2039.            ENDDO
  2040.  
  2041. will output:
  2042.  
  2043. The first memo field that prints will print out
  2044.         correctly.
  2045.  
  2046.         The second memo field will display like this if there
  2047.                             is more than one line.
  2048.  
  2049.                             ^---------The second and subsequent
  2050.                                       lines are displaced.
  2051.  
  2052.  
  2053. title:  & FUNCTION
  2054. version:  10 11 DR
  2055. date:  10 Mar 1986
  2056. text: 
  2057. The macro (&) function  will not expand properly if it is
  2058. followed by a space and parentheses.  For example:
  2059.  
  2060.  
  2061.      STORE 'LIST FOR' TO x
  2062.      STORE 10 TO memvar
  2063.      &x Field1 = memvar
  2064.  
  2065.  
  2066. will execute properly, but,
  2067.  
  2068.      &x (Field1 - memvar) * memvar = 0
  2069.  
  2070. will return the "*** Unrecognized command verb" error message.
  2071. This problem can be avoided by terminating the macro-substituted
  2072. memory variable with a period.  For example,
  2073.  
  2074.      &x. (Field1 - memvar) * memvar = 0
  2075.  
  2076. will work.  It is always a good idea to terminate a macro with a
  2077. period.
  2078.  
  2079.  
  2080. title:  @...SAY...PICTURE "@Z"
  2081. version:  10 11
  2082. date:  10 Mar 1986
  2083. text: 
  2084. The zero-suppress function, @Z, will not suppress the decimal
  2085. point when it is used with a non-integer value of zero.  To work
  2086. around this display problem, use the following command sequence
  2087. instead of the @Z function.
  2088.  
  2089.          IF STR( number, 5, 2 ) <> " 0.00"
  2090.             @ 10,0 SAY number
  2091.          ENDIF
  2092.  
  2093. title:  @...SAY...PICTURE LOGICAL VARIABLE
  2094. version:  10 11 DR
  2095. date:  10 Mar 1986
  2096. text: 
  2097.    There is no PICTURE clause that applies to a logical variable
  2098. in an @...GET command.  However, if you attempt to use a PICTURE
  2099. clause on a logical field or memory variable, dBASE III will not
  2100. trap it as an error.  When the READ is executed, dBASE III will
  2101. not pause for user input, and the value of the field or variable
  2102. will not be changed.
  2103.    One possible occurrence of this is when a memory variable is
  2104. declared PUBLIC but is not initialized before an @...GET command.
  2105. (dBASE III will automatically initialize a PUBLIC memory variable
  2106. to a logical .F.)  If the variable was not intended to be a
  2107. logical variable, the above symptoms will manifest themselves.
  2108. You may want to use the SPACE() function to initialize character
  2109. variables and zero to initialize numeric variables.
  2110.  
  2111.  
  2112. title:  @...SAY...PICTURE "@A" AND "@!"
  2113. version:  10 11 DR
  2114. date:  10 Mar 1986
  2115. text: 
  2116. The A and ! PICTURE clause functions are mutually exclusive.
  2117. That is, you cannot combine the two to make a new function that
  2118. will limit data input to alphabetic characters and force the
  2119. letters to uppercase.  If A and ! are used together, only the
  2120. second function will be in effect.  For example:
  2121.  
  2122.      PICTURE "@A!"  is equivalent to   PICTURE "@!"
  2123.      PICTURE "@!A"  is equivalent to   PICTURE "@A"
  2124.  
  2125.  
  2126. title:  @...SAY...PICTURE "@X" AND "@C"
  2127. version:  10 11 DR
  2128. date:  10 Mar 1986
  2129. text: 
  2130. The C and X functions documented in the manual reference to
  2131. the @...SAY command will always display positive numbers as
  2132. credits (CR) and negative numbers as debits (DB).  Use the
  2133. following program segment if you need them to display in the
  2134. reverse order (that is, positive numbers as debits (DB) and
  2135. negative numbers as credits (CR)):
  2136.  
  2137.      DO CASE
  2138.         CASE number > 0
  2139.            @ row,col SAY STR(number,17,2) + "DB"
  2140.         CASE number < 0
  2141.            @ row,col SAY STR(-number,17,2) + "CR"
  2142.         OTHERWISE
  2143.            @ row,col SAY STR(number,17,2)
  2144.      ENDCASE
  2145.  
  2146.  
  2147. title:  @...SAY...PICTURE "$", ",", AND "9"
  2148. version:  10 11 DR
  2149. date:  10 Mar 1986
  2150. text: 
  2151. Using the template symbols "$", ",", and "9" in an @...SAY
  2152. PICTURE clause may cause more than one dollar sign to be
  2153. displayed on the screen.  Specifically, if the value being
  2154. displayed does not fill positions in the display string preceding
  2155. the comma position, a dollar sign will be displayed in place of
  2156. the comma.
  2157.  
  2158. For example:
  2159.  
  2160.      mem = 123456
  2161.      @ 10,0 SAY mem PICTURE "$999,999,999"
  2162.      @ 11,0 SAY mem PICTURE "$999,999,999,999"
  2163.  
  2164. will output:
  2165.  
  2166.      $   $123,456
  2167.      $   $   $123,456
  2168.  
  2169. The PICTURE template, ($), is intended to replace leading zeros
  2170. in a numeric display with dollar signs.  This means that  dollar
  2171. signs should always display in a fixed position format.  To
  2172. display a fixed position dollar sign leading a numeric expression
  2173. with embedded commas, use two @...SAY commands, one to display
  2174. the dollar sign and the other to display the numeric variable
  2175. with the embedded commas.  For example,
  2176.  
  2177.      mem = 1234.56
  2178.      @ 10,10 SAY "$"
  2179.      @ ROW(),COL() + 1 SAY mem PICTURE "99,999.99"
  2180.  
  2181. If you wish a leading dollar sign that is floating for numeric
  2182. variables with embedded commas, a feature not directly supported
  2183. by dBASE III, use the following command file to format the
  2184. numeric variables.
  2185.  
  2186.      * Commas.PRG
  2187.      PARAMETERS mem
  2188.      mvar = SUBSTR( STR( mem, 9, 2 ), 1, 3 ) + ",";
  2189.           + SUBSTR( STR( mem, 9, 2 ), 4, 3 );
  2190.           + SUBSTR( STR( mem, 9, 2 ), 7, 3 )
  2191.      cntr = 1
  2192.      DO WHILE SUBSTR( mvar, cntr, 1 ) $ ", "
  2193.         cntr = cntr + 1
  2194.      ENDDO
  2195.      cnum = SPACE( cntr - 1 ) + "$" + SUBSTR( mvar, cntr )
  2196.      @ 10,0 SAY cnum
  2197.      * EOP Commas.PRG
  2198.  
  2199.      STORE 1234.56 TO x
  2200.      DO Commas WITH x
  2201.  
  2202. outputs:
  2203.  
  2204.      $1,234.56
  2205.  
  2206. This formula will work with numbers as large as $999,999.99.
  2207. Larger numbers require that the length argument of the STR()
  2208. function and the length and starting point arguments of the
  2209. SUBSTR() function be changed to accommodate the larger number.
  2210. For numbers as large as $999,999,999.99 the second line of the
  2211. preceding program should be changed to:
  2212.  
  2213.      mvar = SUBSTR( STR( mem, 12, 2 ), 1, 3 ) + ",";
  2214.           + SUBSTR( STR( mem, 12, 2 ), 4, 3 ) + "," ;
  2215.           + SUBSTR( STR( mem, 12, 2 ), 7, 3 ) +;
  2216.             SUBSTR( STR( mem, 12, 2 ), 10, 2 )
  2217.  
  2218. This problem persists in the Developer's Release including both
  2219. the PICTURE clause and the TRANSFORM() function.  The
  2220. work-arounds are a little bit easier given some new functions
  2221. including TRANSFORM() itself.  To display a numeric expression
  2222. with a leading dollar sign in fixed position and embedded commas
  2223. concatenate a dollar sign to the result of the TRANSFORM() of the
  2224. numeric expression.  For example,
  2225.  
  2226.      mem = 1234.56
  2227.      @ 10,10 SAY "$" + TRANSFORM( mem, "99,999.99" )
  2228.  
  2229. To display a floating dollar sign leading a numeric expression
  2230. with embedded commas, insert the dollar sign into the result of
  2231. the TRANSFORM() function on the numeric expression.  For example,
  2232.  
  2233.      mem = 1234.56
  2234.      @ 10,10 SAY SPACE(10-LEN(LTRIM(TRANSFORM(mem,"99,999.99"))));
  2235.                         ^--------- Length of the TRANSFORM() picture.
  2236.  
  2237.                  + "$" + TRANSFORM(mem,"99,999.99")
  2238.  
  2239. It is important to note that the first element in the SPACE()
  2240. function argument must be the length of the TRANSFORM() picture.  If,
  2241. for example, the picture is "999", then the element is three.
  2242.  
  2243.  
  2244. title:  @...SAY...PICTURE "@("
  2245. version:  10 11 DR
  2246. date:  10 Mar 1986
  2247. text: 
  2248. Displaying negative numeric memory variables with the @...SAY
  2249. command and the PICTURE function "@(" to enclose negative numbers
  2250. in parentheses, will not display the PICTURE correctly.  Blanks
  2251. will display between the beginning parenthesis and the memory
  2252. variable contents.  For example:
  2253.  
  2254.      number = 23.15
  2255.      @ 10,10 SAY number PICTURE "@("
  2256.  
  2257.      (      23.15)
  2258.  
  2259. The workaround is as follows:
  2260.  
  2261.      STORE STR( number, 12, 2 ) TO mem1
  2262.                          ^------------ Use an appropriate length
  2263.                                        and decimal value.
  2264.      STORE AT( "-", mem1 ) TO mpos
  2265.      @ 10,10 SAY SPACE(mpos-1) + "(" + SUBSTR(mem1,mpos+1)  + ")"
  2266.  
  2267.      (23.15)
  2268.  
  2269.  
  2270. title:  @...SAY...GET
  2271. version:  10 11 DR
  2272. date:  10 Mar 1986
  2273. text: 
  2274.    When entering numbers to the right of the decimal place of
  2275. numeric fields, typing the period will sometimes cause the cursor
  2276. to jump back to the beginning of the field.  This problem
  2277. manifests itself only when using a database file with one or more
  2278. index files.  The problem will also occur using APPEND, BROWSE,
  2279. CHANGE, and EDIT.
  2280.    There are numerous work-arounds for this anomaly, but not all of
  2281. them work all of the time.  First, try reducing the number of
  2282. buffers used in Config.sys to between 12 and 15.  If this doesn't
  2283. solve the problem and you are using an Autoexec.bat file, try
  2284. removing the batch file from your boot disk.  Finally, if there
  2285. is a DEVICE=ANSI.SYS entry in Config.sys, try removing the entry.
  2286. Note: You will need to reboot the machine in order for any of
  2287. these changes to take effect.
  2288.    If text is printed to the screen with @...SAY, and then an
  2289. @...SAY...GET is printed to the same line without erasing it first,
  2290. characters from the previous text will appear between the SAY and
  2291. the GET.  For example:
  2292.  
  2293.      STORE '123' TO mem
  2294.      @ 10,0 SAY 'XXXXXXXXXXXX'
  2295.      @ 10,0 SAY 'A' GET mem
  2296.  
  2297. displays:
  2298.  
  2299.      AX123XXXXXXX
  2300.       ^---------------- This should not be displayed.
  2301.  
  2302.    If you attempt to do a GET at a location greater than or
  2303. equal to 80, the error message "SAY/GET position is off the
  2304. screen" will be displayed.  However, if you issue an
  2305. @...SAY...GET that places the first character of the GET field in
  2306. column 80, the machine will lock, requiring a warm boot.  For
  2307. example:
  2308.  
  2309.         STORE 'TEST' TO test
  2310.         @ 10,78 SAY 'x' GET test
  2311.  
  2312. Note that this problem occurs only in this one instance.  If the
  2313. column coordinate in the above example is changed to 79, no error
  2314. message is displayed and the GET wraps around to the next line on
  2315. the screen.
  2316.  
  2317.  
  2318. title:  @...GET ALIAS IN FORMAT FILE
  2319. version:  10 11 DR
  2320. date:  10 Mar 1986
  2321. text: 
  2322. Any command that allows editing of a record will only
  2323. operate in the SELECTed work area.  However, attempting an
  2324. @...SAY...GET using an ALIAS or SELECT to access another work
  2325. area in a format (.FMT) file will not produce an error message.
  2326. Instead, the entire line is suppressed, including the SAY
  2327. statement.  The Developer's Release of dBASE III will return the
  2328. "Variable not found" error message if any attempt is made to GET
  2329. a field from another work area.  In versions 1.0 and 1.1 of dBASE
  2330. III, the command:
  2331.  
  2332.      @ 10,4 SAY "Testing " GET B->Test
  2333.  
  2334. in a format file will not display anything on the screen.
  2335. Issuing this command from the dot prompt or in a command file
  2336. will return "Variable not found."  An alias name is acceptable in
  2337. a SAY statement, even in a format file.
  2338.  
  2339.      @ 10,4 SAY "Testing " + B->Test
  2340.  
  2341. will display properly.
  2342.  
  2343. Notice that in the first example neither the SAY nor the GET
  2344. pertaining to the second work area are displayed.
  2345.  
  2346.  
  2347.  
  2348. 108 item(s) found 
  2349.