home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload
/
ShartewareOverload.cdr
/
database
/
db3anam.zip
/
DB3ANAM.TXT
Wrap
Text File
|
1986-03-28
|
79KB
|
2,349 lines
- Locating dBASE III Anomalies and Workarounds -
( from the Source - Ashton Tate SIG - ATSIG )
108 item(s) found for ALL
title: USING SUSPEND WITH ON (DEVELOPER'S RELEASE)
version: DR
date: 10 Mar 1986
text:
Using the SUSPEND command with the ON command in a program may
cause some unexpected results. The command:
ON KEY SUSPEND
in a program will return the error message, "Valid only in
programs" when a key is pressed. The program, however, will be
SUSPENDed.
The command:
ON ERROR SUSPEND
behaves erratically. It will SUSPEND the program, although
RESUME may have to be entered twice before the program actually
resumes execution.
title: SET FILTER TO EXPRESSION IN PARENTHESIS
(DEVELOPER'S RELEASE AND RUNTIME+)
version: DR
date: 10 Mar 1986
text:
If a SET FILTER TO command has a parenthesis following the TO
and is encrypted using DBC.COM, that command line will produce
the error message "Invalid function name" when it is run from
dBRUN or dBASE III Developer's Release. The command:
SET FILTER TO (F1 = 2 .OR. F2 = 2) .AND. F3 > 1
will produce this error when encrypted and run. To work
around, build the FILTER expression by placing the simplest
non-grouped subexpression first and then begin the grouped
subexpressions. For example:
SET FILTER TO F3 > 1 .AND. (F1 = 2 .OR. F2 = 2)
title: IIF() NESTTING LIMITATION (DEVELOPERS'S RELEASE)
version: DR
date: 10 Mar 1986
text:
There is a limit to the number of times IIF() may be nested.
Nesting this function eight or more deep will return a zero
instead of the designated value.
title: SORT IGNORES EXTENSION OF RESULTANT DATABASE
version: 10 11 DR
date: 10 Mar 1986
text:
SORTing to a file with an extension other than .DBF will result
in the extension being ignored and a .DBF extension given to
the new file. For example:
SORT ON Field1 TO Newfile.NEW
will create Newfile.DBF.
title: SET TALK ON HAS PRECEDENCE OVER SET CONSOLE OFF
version: 10 11 DR
date: 10 Mar 1986
text:
For commands that produce a running total or a final result,
such as INDEX or COUNT, the SET TALK ON command takes
precedence over the SET CONSOLE OFF command so that the results
of TALK will be displayed when SET CONSOLE is OFF. The
following routine demonstrates this.
SET TALK ON
SET CONSOLE OFF
USE Test
COUNT TO memvar <--- The results of COUNT display.
? memvar <--- This is suppressed by SET TALK OFF.
The SET CONSOLE OFF command in the Developer's Release of dBASE
III does suppress the results of SET TALK ON in all cases.
title: @ <ROW>, <COL> WITH NO ARGUMENTS
version: 10 11 DR
date: 10 Mar 1986
text:
An @...SAY statement sent to the printer with no argument and a
row coordinate greater than 24 will return the error message
"SAY/GET position is off the screen." For example,
SET DEVICE TO PRINT
@ 25,0
The @ <row>, <col> command with no argument clears that row on
the screen beginning at the column position, regardless of the
status of SET DEVICE TO. Be sure that any @...SAY directed to
the printer has an argument.
title: CTRL-K-R IN MODIFY COMMAND
version: 10 11
date: 10 Mar 1986
text:
When using the Ctrl-K-R in the dBASE III word processor, there
is a limit of fifteen characters to the name of the file being
imported. If the name of the file, including drive designator
and path, is sixteen characters or longer, problems will
occur. The computer may freeze with the message "File does not
exist (Hit SPACE)" being displayed; or the error message "***
STACK OVERFLOW ***" appears and the user is returned to
PC/MS-DOS. For example, the filenames:
B:\A\Data10.TXT
B:\Datapath\One
are acceptable, while
B:\A\Data101.TXT <-- "File does not exist (Hit SPACE)"
B:\Datapath\File <-- "*** STACK OVERFLOW ***"
are not. In the Developer's Release, MODIFY COMMAND will
support filenames including paths exceeding sixteen
characters.
title: DO PROGRAM CAUSES RETURN POINTERS TO BE LOST
version: 10 11
date: 10 Mar 1986
text:
Executing a command file with the same name as a procedure in a
procedure file that has been opened and closed causes return
pointers to be lost. For example, if a file has a nested DO
WHILE, RETURNing from the subprogram will cause the controlling
DO WHILE loop to terminate abnormally. The program below
demonstrates this problem.
*--- Test.PRG
DO WHILE .T.
SET PROCEDURE TO Testa
DO Test1 <-- From Testa.PRG.
CLOSE PROCEDURE
DO Test1 <-- Separate command file
ENDDO <-- will terminate although no
EXIT or RETURN has been executed.
This problem has been corrected in the Developer's Release of
dBASE III.
title: BROWSE WHEN APPENDING
version: 10 11 DR
date: 10 Mar 1986
text:
When APPENDing new records with the BROWSE command, dBASE III
will not automatically pan right to allow data entry to fields
that are off the screen. Instead, the cursor will drop to the
next line and dBASE III will start to enter another record.
Use Ctrl-B and Ctrl-F to pan left or right, respectively, while
APPENDing.
title: INDEX ON SUBSTR( <FIELD>, N, LEN( <FIELD> )
version: 10 11
date: 10 Mar 1986
text:
INDEXing a database file with a key expression that includes
the LEN() function as the second argument of the SUBSTR()
function will result in a nonfunctional index file. For
example:
INDEX ON SUBSTR( <Field>, 1, LEN( <Field> ) ) TO;
Indexfile
will create an index file that appears to be correctly
constructed. You can FIND or SEEK a record and then EDIT it.
The index file, however is not updated and any attempt to GOTO
a record or BROWSE will return the error message "Record not in
index."
The problem is corrected in the Developer's Release.
title: DO <PROCEDURE> CANNOT CONTAIN SPECIAL CHARACTERS
version: 10 11 DR
date: 10 Mar 1986
text:
In dBASE III, PROCEDURE names cannot contain special
characters, although filenames can. If the name of a PROCEDURE
within a PROCEDURE file contains a special character ($, #, -,
@, etc.), using the DO <procedure> command will return the
error message "Unrecognized phrase/keyword in command." For
example:
*--- Proc-test.PRG
PROCEDURE Test-it
? 'This is Test-it from Proc-test.PRG'
RETURN
* EOP Proc-test.PRG
*--- Test.PRG
SET PROCEDURE TO Proc-test <--- This works properly.
DO Test-it <--- This returns the error
RETURN message.
* EOP Test.PRG
Note that this applies only to PROCEDURE names and not to
command files names. This may be a problem if you have
recently merged command files into a procedure file and your
command filenames contain special characters.
title: INDEX ON STR()
version: 10 11
date: 10 Mar 1986
text:
(1) Attempting to INDEX ON the concatenation of many STR() functions
may create an index that is in record number order. Specifically, if
the length of the key expression is 80 or 90 characters long and
consists solely of a concatenation of STR() functions, the resultant
index file will be in the same order as the database file. For
example:
. USE Numfile
. LIST
RECORD# NUM1 NUM2 NUM3 NUM4 NUM5 NUM6 NUM7 NUM8
1 8 8 8 8 8 8 8 8
2 7 7 7 7 7 7 7 7
3 6 6 6 6 6 6 6 6
4 5 5 5 5 5 5 5 5
5 4 4 4 4 4 4 4 4
6 3 3 3 3 3 3 3 3
7 2 2 2 2 2 2 2 2
8 1 1 1 1 1 1 1 1
. INDEX ON STR(Num1,1)+STR(Num2,1)+STR(Num3,1)+STR(Num4,1)
+STR(Num5,1)+STR(Num6,1)+STR(Num7,1)+STR(Num8,1) TO Numex
* The key expression in this example is 96 characters long.
* The expected result is that the records will be in
* reverse record number order when the index Numex is used.
. LIST
RECORD# NUM1 NUM2 NUM3 NUM4 NUM5 NUM6 NUM7 NUM8
1 8 8 8 8 8 8 8 8
2 7 7 7 7 7 7 7 7
3 6 6 6 6 6 6 6 6
4 5 5 5 5 5 5 5 5
5 4 4 4 4 4 4 4 4
6 3 3 3 3 3 3 3 3
7 2 2 2 2 2 2 2 2
8 1 1 1 1 1 1 1 1
The database file has been indexed in record number order and is
identical to the unindexed file.
(2) The maximum length of key expression is 100 characters.
In the example above, the key expression is 96 characters long which
is within the limitation. The maximum length of the key itself is
also 100 characters. In the example above, the key is 8 characters
long, one character for each field. If either the key or the key
expression exceeds the 100 character limitation, dBASE III will
normally return the error message "Index is too big (100 char
maximum)". However, this error is not trapped if the key expression
is formed by the concatenation of STR() functions. The INDEX command
given in the paragraph above may be lengthened as in the following
example and no error message will result.
INDEX ON STR(Num1,1)+STR(Num2,1)+STR(Num3,1)+STR(Num4,1)
+STR(Num5,1)+STR(Num6,1)+STR(Num7,1)+STR(Num8,1)+STR(Num
1,1) TO Numex
The key expression in this command is 108 characters in length.
No error message is returned when this command is executed, but one of
two errors will occur. Either the index that is created is still in
record number order as explained in the first paragraph, or dBASE III
will return random error messages as it attempts to create the index.
Because this is not trapped, pay extra attention when you create index
files from a long expression consisting of the concatenation of STR()
functions.
title: RETURN TO MASTER
version: 10 11
date: 10 Mar 1986
text:
RETURN TO MASTER will not work properly if it is used in a
PROCEDURE which is called from within a DO WHILE loop with the
MASTER as the calling program. Specifically, the program will
stop execution upon RETURNing TO the MASTER file. However,
pressing Esc will allow the user to return to the dBASE III dot
prompt. For example:
* Test.PRG
PUBLIC one
one = "Y"
SET PROCEDURE TO Test1
DO WHILE one = "Y"
DO Pro_3
? "Back IN Test.PRG"
ENDDO
CLOSE PROCEDURE
RETURN
* Test1.PRG
PROCEDURE Pro_3
? "Now in Pro_3 PROCEDURE in Test1 file"
RETURN TO MASTER
If RETURN TO MASTER is changed to RETURN, the command file works
properly. If Test.PRG were to call another file which
then called the procedure file, RETURN TO MASTER will work.
title: ZAP, PACK, AND INDEX FILES
version: 10 11 DR
date: 10 Mar 1986
text:
PACKing or ZAPping a database file without its index files in
use, then opening the index files and adding records to the file
will result in multiple record entries in the index files. For
example, the following command sequence will result in an index
file with two entries for each record in the database file:
USE File_one INDEX Alpha
COPY TO New_file
CLOSE INDEX
ZAP
SET INDEX TO Alpha
APPEND FROM New_file
Ideally, opening the index file after the file has been ZAPped
should be trapped by an error message, such as "End of file
encountered unexpectedly" or "Record out of range".
title: USE
version: 10 11 DR
date: 10 Mar 1986
text:
An attempt to use the PC/MS-DOS directory navigation path (..) in
a USE command will give unexpected results. USEing the database
will make the file active, but there will be no ALIAS. An
attempt to USE another database file in another SELECT area using
the same technique, will cause the error message "ALIAS name
already in use" to be displayed.
* ---Open first database file.
USE ..\nme\Budget
DISPLAY STATUS
Currently selected database:
Select area - 1, Database in use: C:..\nme\Budget.dbf
Alias -
* ---Open another database file.
SELECT 2
USE ..\nme\Sumfrm
ALIAS name already in use
?
USE ..\nme\sumfrm
If an ALIAS is assigned in both USE commands, no error results.
If you need to avoid specifying the full path name, use the RUN
command to log the previous directory and then specify the
datafile to USE. For example,
RUN CD ..
USE nme\Budget
SELECT 2
USE nme\Sumfrm
title: TYPE
version: 10 11
date: 10 Mar 1986
text:
If you attempt to use the following syntax for the TYPE command:
TYPE <File> TO SCREEN
it will be trapped as an error and give the message, "File does
not exist". Subsequent attempts to USE or MODIFY the text file
that you wanted to TYPE will return the error message, "File is
already open." CANCEL or CLEAR ALL will not close the file.
QUITting and re-entering dBASE III is the only option.
The problem is fixed in the Developer's Release. You will
receive the expected error message, "Syntax error" and the file
being TYPEd will remain properly closed.
title: TRIM() WITH LIST OR DISPLAY
version: 10 11 DR
date: 10 Mar 1986
text:
TRIM() will not work with the LIST or DISPLAY commands when the
the function is the last portion of an expression in an
expression list, or the TRIM() is the last portion of an
expression followed by a concatenation of spaces. For example:
LIST TRIM(Name), Address
^__________________ (note TRIM() is just before
the comma)
LIST TRIM(Name) + ' ' , Address
^-----------(note TRIM() is followed by a
space then the comma)
TRIM will work, however, when not in the last position of the
expression list. For example:
LIST TRIM(Name) + ' ' + Address, City
title: SUSPEND (DEVELOPER'S RELEASE)
version: DR
date: 10 Mar 1986
text:
If you SUSPEND a command file and restart it with DO
<filename> instead of RESUME, dBASE III opens the file
again, without closing the previous session. The expected error
message "File is currently open" does not appear. As each file
remains open, this will eventually produce "Too many files are
open." Issuing the CANCEL command will close every instance of
the open file.
This problem is most likely to occur if you are debugging a
command file and forget that you are still in SUSPEND. It is
always advisable to RESUME before calling any command file if you
are in the midst of a programming and debugging session.
title: SUM TO AND PUBLIC MEMORY VARIABLES
version: 10 11
date: 10 Mar 1986
text:
Attempting to SUM TO memory variables that have been declared as
PUBLIC will usually result in erroneous data. Initializing the
variables before the SUM command will sometimes, but not always,
correct the error. In addition to this problem, there is a
practical limit to the number of expressions that may be used in
one SUM command.
In order to use the SUM command reliably, follow these rules.
1. Do not SUM TO memory variables that are PUBLIC.
Instead, use PRIVATE variables and STORE the
results of the SUM to PUBLIC variables.
2. Limit the number of expressions in the SUM
command to three or less.
title: SUM PRODUCES LINEFEEDS
version: 10 11
date: 10 Mar 1986
text:
The SUM and AVERAGE commands send two linefeeds to both the
screen and printer. For example, the following command file will
output two extra linefeeds:
SET TALK OFF
SET PRINT ON
? "Income"
SUM Income TO inc
? inc
SET PRINT OFF
OUTPUT:
Income
<--+ Two extra linefeeds.
<--+
17384805.00
The only workaround for screen output is to SET CONSOLE OFF when
executing a SUM or an AVERAGE, and SET CONSOLE ON when done. For
printer output you can use SET PRINT OFF before the command and
SET PRINT ON afterward.
title: STORE LARGE NUMERIC
version: 10 11
date: 10 Mar 1986
text:
Attempting to STORE a number with more than 43 digits to a memory
variable will hang the computer and require a warm boot (that is,
Ctrl-Alt-Del). More than 60 digits will require a cold boot (that
is, restarting the system.
title: STORE
version: 10 11
date: 10 Mar 1986
text:
STOREing 254 characters to a memory variable will eventually give the "Out of
memory variable memory" error message even though DISPLAY MEMORY shows that
there is memory space available. With MVARSIZ at the default setting, this
seems to occur after the 23rd attempt to STORE to the memory variable.
Increasing the MVARSIZ will allow more STORE commands, but will eventually
produce this error. For example, the following set of commands will produce
the
message after 23 iterations, with MVARSIZ set at the default.
CLEAR MEMORY
DO WHILE .T.
STORE SPACE( 254 ) TO memvar
ENDDO
title: SORT WITH 66 RECORDS
version: 10 11
date: 10 Mar 1986
text:
SORTing a file that has more than 66 records in such
a way that the resulting file has exactly 64 records
will produce a file in which the first record is corrupted.
title: SORT FOR SUBSTR()
version: 10 11
date: 10 Mar 1986
text:
Attempting to SORT FOR SUBSTR(fieldname,n,n) = <value> will return
"00% Sorted *** STACK OVERFLOW ***", dropping the user out of dBASE
III to the operating system.
title: SORT FOR A RANGE OF DATES
version: 10 11
date: 10 Mar 1986
text:
Attempting to SORT only a subset of a database file based on a
single date or a range of dates may cause a problem if the
following form is used:
SORT ON <exp> TO <file> FOR DTOC(date)="99/99/99"
where the 9's represent any date. The error message that will
result is:
00% Sorted *** STACK OVERFLOW ***
and you will be dropped out of dBASE III to the operating system.
To prevent this problem, use the following form.
SORT ON <exp> TO <file> FOR date=CTOD("99/99/99")
This work-around will not work for blank dates. The sort will
appear to execute normally, but no records will be written to the
target file.
title: SORT
version: 10 11 DR
date: 10 Mar 1986
text:
(1) Attempting to SORT a file with SET FILTER TO
SUBSTR(fieldname,n,n) = <value> will return a "*** STACK
OVERFLOW ***" and drop you out of dBASE III to the operating
system.
[1.0, 1.1]
(2) SORTing a database file from a command file that is nested 13
levels deep will fail with a system crash. The SORT command will
return a status message stating that a percentage of the records
in the original file were SORTed, but then the computer will
freeze with no error message or warning.
[1.0, 1.1, D.R.]
(3) Attempting to use the command SORT TO <Filename> ON
<Fieldname> with a RELATION SET produces the error message "***
STACK OVERFLOW ***" and will drop you out of dBASE III to the
operating system prompt. This will not occur if the RELATION is
SET to RECNO().
[1.0, 1.1]
(4) One cannot SORT to a file in a directory other than the
current one. An attempt to do this will not produce an error
message and will not create the designated file. Instead, a file
name W44 will be created in the current directory of the default
drive.
[1.0, 1.1]
(5) The effective limit of SORT is in the 32,000 record range.
SORTing a file with more than 32,000 records will produce the
following error messages:
nn% Sorted
Records do not balance...(PROGRAM ERROR)
100% Sorted
The SORTed file will not contain all the records from the
original.
The workaround for sorting databases in excess of 32,000 records
is to INDEX and then COPY. The procedure is as follows:
USE <filename>
INDEX ON <sort key> to Temp
COPY TO Sorted
[1.0, 1.1]
title: SET RELATION TO
version: 10 11
date: 10 Mar 1986
text:
The command syntax SET RELATION INTO <file> TO <key> will not
SET the RELATION although no error message is displayed and
DISPLAY STATUS shows the RELATION as SET.
The SET RELATION command is sensitive to the order that the INTO
and the TO clauses are specified. Apparently, everything after
the INTO clause is ignored. Be sure to check that you have
specified the TO clause before the INTO clause if your RELATIONs
appear to fail.
title: SET ORDER TO (DEVELOPER'S RELEASE)
version: DR
date: 10 Mar 1986
text:
SET ORDER TO 0 or <space> is intended to cause the database file
to act in physical, unindexed order, while maintaining the
integrity of the open indexes. However, the indexes are not
updated if the key field is changed. For example:
USE <Filename> INDEX <Index1>, <Index2>
SET ORDER TO
EDIT <------ Change key field for Index1.NDX
SET ORDER TO 1
will produce the error message "Record is not in index."
title: SET HISTORY TO (DEVELOPER'S RELEASE)
version: DR
date: 10 Mar 1986
text:
The SET HISTORY TO command is documented as having a 16,000
command line limit. However, there are a number of problems that
can occur when a large number is used as its argument.
1. There is no way to escape from a LIST HISTORY. If you SET
HISTORY TO a large number, enter a large number of commands,
and LIST HISTORY, the computer may be tied up for some time as
the entire contents of HISTORY scroll by. Pressing Esc will
not interrupt the LIST.
2. HISTORY appears to use memory without limit. If you SET
HISTORY TO is a large number, it is possible to use all the
available memory. So much memory may be used that it is
impossible to return to the operating system level. The error
message:
Memory allocation error
Cannot load COMMAND, system halted
appears if you attempt to QUIT in such as case. Setting
MAXMEM higher than the default will delay, but not prevent the
problem.
Furthermore, the dBASE III Reference Manual implies that
--------------------------
HISTORY respects the MAXMEM setting by stating that the RUN
command may overwrite the HISTORY stack unless MAXMEM is set
higher than 256K. However, HISTORY appears to reserve memory
beyond MAXMEM. If the number of commands to store in HISTORY
is SET high and HISTORY contains many entries, attempting the
RUN command will return the error message, "Insufficient
memory."
3. There is no error trapping on the upper limit of HISTORY and
so it is possible to SET it to values higher than 16,000.
Values less than 1,000,000 appear to work properly, although
it is not known if more than 16,000 lines of code are stored.
When the value of HISTORY exceeds 1,000,000, the HISTORY
buffer is corrupted. Any attempt to DISPLAY or LIST HISTORY
will display graphic characters to the screen and the computer
may freeze.
title: SET FUNCTION, LIMIT OF 30 CHARACTERS
version: 10 11
date: 10 Mar 1986
text:
The maximum number of characters (including semicolons) that can
be programmed into a function key is 30. Exceeding this
limitation is not trapped as an error. Instead, the extra
characters wrap into the next function key. This problem will
also cause an incorrect display of the function key values in
full-screen SET.
title: SET FORMAT TO <FILENAME>
version: 10 11 DR
date: 10 Mar 1986
text:
Issuing an APPEND, CHANGE, EDIT, or READ command when the open
format file does not match the current database will lock the
computer.
title: SET FILTER TO WITH GO TOP
version: 10 11 DR
date: 10 Mar 1986
text:
After a SET FILTER TO is issued, it may be necessary to issue a
GO TOP. Otherwise, the first record in the file may fall through
(that is, it may not be filtered out) even if it does not satisfy
the filter condition.
The commands that do not require a GO TOP are those that
automatically rewind the database file before executing (that is,
any command whose default scope is ALL). These include AVERAGE,
COUNT, LIST, and SUM. The commands that allow the first record
to fall through are those that have a scope of NEXT <n>. These
include ?/??, @...SAY, BROWSE, and DISPLAY.
title: SET FILTER TO WITH GO BOTTOM
version: 10 11 DR
date: 10 Mar 1986
text:
If a SET FILTER TO condition is not satisfied by any records in
the database file and a GO BOTTOM is issued, both the EOF() and
BOF() will return a true (.T.). Removing the filter by issuing a
SET FILTER TO does not reset EOF() or BOF(). The record pointer
must be repositioned to reset EOF() and BOF(). SKIP or SKIP -1,
however, will return a file boundry error message, because EOF()
and BOF() are true. To move the record pointer appropraitely
issue a GO TOP and the BOF() and EOF() values will be reset to
false (.F.).
title: SET EXACT ON AND INOPERABLE INDEXES
version: 10 11
date: 10 Mar 1986
text:
SET EXACT ON will render indexes inoperable when the length of
the key expression is not a multiple of four. SEEK and FIND
will return "No find" even if the string is in the file. Any
attempt to access an individual record will return "Record is not
in index". Commands that return this message are GOTO <n>, EDIT
<n>, and <n>, where <n> represents the record number.
One work-around for this is to MODIFY STRUCTURE and adjust the
length of the key field to a multiple of four.
Another work-around is to recreate the index and add spaces to
the end of the index key expression to bring it to a multiple of
four. For example, the following index is created with the
character field, Code, of width six:
INDEX ON Code + SPACE(2) TO Codendx
The above key expression, Code + SPACE(2), will evaluate to an
index key of eight characters which is a multiple of four.
title: SET ESCAPE ON/OFF
version: 10 11 DR
date: 10 Mar 1986
text:
Ctrl-S will not pause scrolling in dBASE III if ESCAPE is SET OFF.
title: SET DELIMITERS ON
version: 10 11
date: 10 Mar 1986
text:
If you SET DELIMITERS ON, then CREATE or MODIFY a database file
structure, pressing Esc without making any changes will SET
DELIMITERS OFF.
title: SET CARRY ON
version: 10 11 DR
date: 10 Mar 1986
text:
If records are added to a database file with SET CARRY ON and the
last record in the file is marked for deletion, the new records
will also be marked for deletion. This is true for adding
records with APPEND and BROWSE.
title: SET (FULL-SCREEN), USING THE PATH OPTION
version: 10 11
date: 10 Mar 1986
text:
Under the Disk heading in full-screen SET, the DISK DRIVE SEARCH
PATH is used to set the internal dBASE III path. If this path
has already been set in Config.DB or by using the dBASE SET PATH
command, the path name will show up when this option is selected.
However, when either Return or Esc is pressed at the selection,
the path name will be erased. Therefore, if you select the Path
option and do not wish to change it, you must re-enter the path
name. An alternate way to view the internal dBASE III path name
is to use DISPLAY STATUS.
title: SET (FULL-SCREEN), USING THE INDEX OPTION
version: 10 11
date: 10 Mar 1986
text:
Under the Files heading in full-screen SET, there is an option to
open INDEX files. This option neglects to open the selected
index files when used and it will also close all active index
files in the currently selected work area.
title: ROUND()
version: 10 11
date: 10 Mar 1986
text:
The ROUND() function will not round negative numbers correctly.
You can use the following procedures to round off a negative
number:
PROCEDURE Abs {Absolute value}
PARAMETERS inval, sign, outval
IF inval < 0
sign = (-1)
outval = (-inval)
ELSE
sign = 1
outval = inval
ENDIF
RETURN
PROCEDURE Round {Round a positive or negative number}
PARAMETERS inval, outval
sign = 1
DO Abs WITH inval, sign, outval
outval = sign * ( INT( ( outval * 100 ) + .5 ) / 100.00 )
RETURN
Round is used in conjunction with Abs in rounding a number.
Round will round a number to two decimal places. An example of
how the above procedures would be used is given below.
* ---Assumes Math.prg contains Abs and Round.
SET PROCEDURE TO Math
INPUT "Enter number to round :" TO number
result = 0.0
DO Round WITH number, result
? result
CLOSE PROCEDURE
title: RETURN TO MASTER
version: 10 11
date: 10 Mar 1986
text:
title: REPORT FORM AND MODIFY REPORT
version: 10 11
date: 10 Mar 1986
text:
(1) A REPORT FORM that is defined with a report width and a left
margin whose difference is exactly 256 causes dBASE III to
display garbage on the screen and/or printer and will require a
warm boot (that is, Ctrl-Alt-Del). Increasing the width of the
report or decreasing the left margin so that their difference is
greater than 256 corrects this problem, but the report title will
display on several lines instead of just one. A difference of
255 or less will properly display the report.
(2) MODIFY REPORT will allow the number of decimal places to be
changed from the default. If this is done and the report is
run, everything is as expected. However, if the report is
modified again, the number of decimal places reverts to the
default when the cursor reaches the "# decimal places" field.
title: REPORT FORM WITH STACKED COLUMNS
version: 10 11 DR
date: 10 Mar 1986
text:
CREATEing a REPORT FORM field that consists of stacked columns
built with the result of the STR() function and numeric fields
may cause numbers to display incorrectly. Specifically,
entering:
STR( Field1, 5 ) + STR( Field2, 5 )
in the field contents and specifying a column width of five will
result in a correct display only when the fields have five-digit
numbers stored in them. If the number has less than five digits,
the display will be misplaced by the number of digits missing.
The example above will produce:
11111
11111
if the fields are full, but:
1111
1111
1111
if there are only four digits in the fields.
title: REPORT FORM WITH RIGHT MARGIN=REPORT WIDTH
version: 10 11
date: 10 Mar 1986
text:
CREATEing a REPORT FORM with a right margin value equal to the
report width (the page width minus the left margin) will display
garbage to the screen or printer. This happens beacuse there is
no space to print the report.
There is a general misconception about the meaning of the right
margin in the REPORT FORM. Some users have the impression that
its value is the number of characters from the left margin, much
the same way a typewriter works. The value actually refers the
the number of characters the right margin is offset from page
width.
For example,
page width |------------------------------------->|
right margin |<----------|
title: REPORT FORM WITH MULTIPLE LINE HEADINGS
version: 10 11
date: 10 Mar 1986
text:
There is a problem with the REPORT FORM command in printing
multiple line headings. Sometimes when printing a combination of
character and numeric information, the second and third lines of
the column headings get shifted to the left. There is no known
work-around for this problem.
title: REPORT FORM
version: 10 11 DR
date: 10 Mar 1986
text:
(1) When using a REPORT FORM to print a Memo field that is longer
than one page, the field will print continuously on the report
with no page breaks.
[1.0, 1.1, D.R.]
(2) If the NOEJECT option of the REPORT FORM is used, and the
report does not fill the last page, the line counter is not reset
to zero. Therefore, when the next report is printed, the first
page of this report will print an incorrect number of lines.
[1.0, 1.1, D.R.]
(3) REPORT FORMs with two levels of subtotals that use the eject
after subtotals option will format the first page of the report
differently than all other pages. The difference is very slight,
but the first page shows the subgroup heading on the line
directly below the major group. All other pages have a blank
line between the subgroup and the major group headings.
[1.0, 1.1]
(4) When creating a report with subtotals, answering yes to the
"Summary report only? (Y/N)" option can cause one of two known
problems. The REPORT FORM will either print only the contents of
the fields that are being totaled, or it will lock the system
requiring a cold boot.
[1.0, 1.1]
title: REPLACE ALL
version: 10 11
date: 10 Mar 1986
text:
When used without any arguments, REPLACE ALL will return the
error message "Internal error - illegal op code <no.>." The
database file currently SELECTed will not be affected. The op
code number and the number of messages vary from machine to
machine.
title: REPLACE IN ABBREVIATED FORM
version: 10 11
date: 10 Mar 1986
text:
If the REPLACE command is abbreviated, (REPL, REPLA, REPLAC), or
REPLACE is used without an argument, the result may be the error
message "illegal op code <no.>." The op code number is not
relevant and varies from machine to machine.
This Developer's Release will return the message "1 record
replaced."
title: REPLACE
version: 10 11
date: 10 Mar 1986
text:
With SET UNIQUE ON and an index file open, if you REPLACE the key
field with a non-unique key, then REPLACE the key field again
without repositioning the record pointer, dBASE III will return
"No records replaced" and the computer will freeze.
dBASE III will also freeze the computer if SET UNIQUE is ON and
you APPEND a BLANK to an indexed file, and then do a REPLACE on
the key field. This will occur whether or not the APPENDed
record is unique or not.
title: RELEASE ALL
version: 10
date: 10 Mar 1986
text:
There are instances in which the RELEASE ALL command does not
appear to work. After executing a DO WHILE loop <n> times (the
reported instances have occurred at three iterations), the
message 'Out of memory variable memory' appears, though the
memory limits are not exceeded. When RELEASE ALL is replaced
with CLEAR MEMORY, the problem disappears.
title: RECORD AS A RESERVED WORD
version: 10 11 DR
date: 10 Mar 1986
text:
Avoid using any word of the form RECORD???? as a field name,
because it can cause problems with several dBASE III commands.
Specifically, the error message "Variable cannot be found" will
occur if this field is used with either the AVERAGE, DISPLAY,
LIST, REPLACE, or SUM commands.
title: RECNO() VALUES
version: 10 11 DR
date: 10 Mar 1986
text:
The following section of code shows that the RECNO() function returns
the number of the last record accessed prior to closing the file.
Even if the database file is closed, RECNO() retains its last value.
USE Names
GOTO 7
? RECNO()
7
USE <--- Names is closed here.
SELECT 2
USE Temp
? RECNO()
1
SELECT 1
* ---SELECT 1 has no database file in USE, but
* ---RECNO() shows the last record value of
* ---Names before it was closed.
? RECNO()
7
title: PCOL() AND SET MARGIN TO
version: 10 11
date: 10 Mar 1986
text:
PCOL() will not return the current printer head position when
used in conjunction with SET MARGIN TO. Instead, it returns the
current print position plus the margin offset. For example:
STORE "Hello" TO var1
STORE "there" to var2
SET DEVICE TO PRINT
@ 10,0 SAY var1
@ PROW(),PCOL()+1 SAY var2
SET MARGIN TO 10
@ 11,0 SAY var1
@ PROW(), PCOL()+1 SAY var2
RETURN
prints the following:
Hello there
Hello there
title: PARAMETERS
version: 10 11
date: 10 Mar 1986
text:
Misspelling the command PARAMETERS or omitting the command in a
procedure file will produce an irrelevant error message. The error
will usually be a syntax error on a command line that looks like a
RETURN with a right arrow where the "R" should be. This error will
also occur if an incorrect number of values are passed in the DO
<filename> WITH <parameter list> command. For example:
* Program..: Areacalc.PRG
PARAMATERS length,width,area
area = length * width
RETURN
* EOP: Areacalc.PRG
* The following command is entered from the dot prompt.
DO Areacalc WITH 6,4,0
Syntax Error
?
A space following a memory variable in a PARAMETERS statement
will return the "Unrecognized phrase/keyword in command" error
message. The following command sequence demonstrates this
anomaly.
* Test.PRG
PARAMETERS name
name = "Steve" ^-------------there is a blank
RETURN space after "name".
. mvar = "John"
. DO test WITH mvar
Unrecognized phrase/keyword in command
?
PARAMETERS name
title: NUMERIC ACCURACY INCONSISTENCIES
version: 10 11
date: 10 Mar 1986
text:
There are some inconsistencies with the manner in which dBASE III
handles numeric operations, especially comparisons. What follows
are two examples that return unexpected results.
EXAMPLE 1:
. ? 4.1 - 2.1
2.0
. ? INT(4.1 - 2.1) = 2
.F.
. ? INT(4.1 - 2.1)
1
EXAMPLE 2:
. ? SQRT(100)
10.00
. ? SQRT(100) = 10
.F.
. ? INT(SQRT(100)) = 10
.F.
. ? INT(SQRT(100))
9
The only reliable way to compare two numbers in dBASE III is to
use the STR() function. For example:
. ? STR(SQRT(100),10,2) = STR(10,10,2)
.T.
title: MODIFY STRUCTURE
version: 11
date: 10 Mar 1986
text:
It has been reported that MODIFY STRUCTURE will occasionally
write a 00H in the delete marker position of a group of records
in a database file, causing those records to be shifted one
character to the right on LIST and DISPLAY. The records will
appear normal with other commands such as EDIT and REPORT FORM.
To date, this problem has only been reported on the IBM PC AT.
If it occurs, DELETE and RECALL the offending records to restore
the delete marker to its normal state, a 20H. (For more
information on data record structures, see page D3-15.) For
example:
. USE Bad_file
. LIST
Record# NAME CODE PHONE
1 Joe AAA (111)111-1111
2 Mary BBB (222)222-2222
3 Tom CCC (333)333-3333
4 Alice DDD (444)444-4444
5 Betty EEE (555)555-5555
. GOTO 2
. DELETE NEXT 3
3 records deleted
. GOTO 2
. RECALL NEXT 3
3 records recalled
. LIST
Record# NAME CODE PHONE
1 Joe AAA (111)111-1111
2 Mary BBB (222)222-2222
3 Tom CCC (333)333-3333
4 Alice DDD (444)444-4444
5 Betty EEE (555)555-5555
title: MODIFY REPORT
version: 10 11
date: 10 Mar 1986
text:
There is a problem in the REPORT FORM concerning the width of the
column. Specifically, if a change in the field contents affects
the column width, the field width will reflect the change.
However, if the new value is not explicitly re-entered, the width
will revert to the old value when another column is accessed or
CREATE/MODIFY REPORT is exited.
The REPORT FORM in the Developer's Release has been changed to
rectify this problem. When a field's contents are changed, the
column width will reflect the change only if the column width is
increased. However, unlike versions 1.0 and 1.1, all changes to
the column width are saved when CREATE/MODIFY REPORT is exited.
title: MODIFY COMMAND (DEVELOPER'S RELEASE)
version: DR
date: 10 Mar 1986
text:
In the Developer's Release, graphic characters will appear if you
press Ctrl-@, Ctrl-C, or PgDn on the first line of text in MODIFY
COMMAND. These characters are easily removed by editing.
title: MEMO FIELDS, LISTING OR PRINTING AFTER A PREVIOUS FIELD
version: 10 11 DR
date: 10 Mar 1986
text:
A problem displaying memo fields has been found in dBASE III by
one of our users. The problem occurs when you try to list or
print a memo field preceded by a field whose length will force
the first line of the memo field to wrap around one or more
times.
Assume a file structure consisting of two fields:
Structure for database: Example.DBF
Field Field Name Type Width Dec
1 Field1 Character 100
2 Field2 Character 70
3 Comments Memo 10
** Total ** 181
These display commands
? SPACE( 1 ), Comments
? Field1, Comments
? Field2, Comments
? Field1, Field2, Comments
will all produce different results.
If the total length of the fields preceding the memo field is 29
or above, the first line of the memo field will wrap around. The
entire memo field will then be displayed in double space.
Futhermore, if the total length of the fields preceding the memo
field is long enough to force the first line of the memo field to
be displayed starting on the second line of the display, then the
entire memo field will be displayed in triple space.
title: MEMO FIELDS, DISPLAYED FROM AN UNSELECTED AREA
version: 10 11 DR
date: 10 Mar 1986
text:
An attempt to display a memo field from an unSELECTed work area will
produce the error message "Unrecognized phrase/keyword in command".
For example:
SELECT A
USE First
SELECT B
* ---The following database file has the character
* ---field 'Name' and a memo field 'Notes'.
USE Second
SELECT A
? Second->Name <--- This works correctly.
*
* ---The following line returns the error message,
* ---"Unrecognized phrase/keyword in command".
? Second->Notes
*
* ---The following line returns,
* ---"No database in USE, enter filename:"
LIST Second->Notes
title: LOAD (DEVELOPER'S RELEASE)
version: DR
date: 10 Mar 1986
text:
LOADable files must have filenames seven characters or less in
length. Files having a names of eight characters will not be
LOADed correctly.
For example:
LOAD Diskread
CALL Diskread
will return:
File was not LOADed.
when the CALL command is executed. The LOAD command
produces no error message. If the filename above is changed to
Dskread.BIN, the file is LOADed properly.
title: LABEL LIMITATIONS
version: 10 11
date: 10 Mar 1986
text:
Certain LABEL forms lock up the system. This seems to happen
with forms of 13 or more lines. Shorter forms will not print
the last few lines when these lines contain a lot of text.
title: JOIN WITH FILES CONTAINING MEMO FIELDS
version: 10 11
date: 10 Mar 1986
text:
The following anomalies may arise when JOINing database files
that contain memo fields.
1) JOIN will not create the .DBT file for the target database when the
active database file (that is, the file currently SELECTed) contains
the memo field. The error message, "Memo file cannot be opened" will
display when you attempt to USE the target file.
2) If the JOIN is executed with the FIELDS clause and the memo field
is omitted, the target file will display the error message, "Memo file
cannot be opened" when the target file is USEd.
3) If the file being JOINed WITH (that is, the un-SELECTed file) has a
memo field and the active file does not, a .DBT file will be created
for the target file, but the data contained in the memo field will not
be transferred.
Currently, there is no way to get the JOIN command to transfer memo
field information into the target file. One work-around is to use the
S-Join.PRG program which simulates the JOIN command with COPY and
APPEND, and allows memo fields to be joined to the target file.
(S-Join.PRG is in the February, 1985, issue of TechNotes, page D3-7.)
If you do not want the memo fields copied
over, COPY the active database file to another file using the FIELDS
clause that does not include the memo field, USE that file, and then
execute the JOIN.
title: INKEY()
version: DR
date: 10 Mar 1986
text:
The INKEY() function of the Developer's Release does not always
read the leftarrow key as CHR(19). Running the following program
will demonstrate that dBASE III will trap this key only rarely.
i = 0
DO WHILE i <> 13
i = INKEY()
? i
ENDDO
When you run this program, you will notice that dBASE III treats
the leftarrow key as a Ctrl-S, and will pause or start scrolling
accordingly. Sometimes the key will be trapped and INKEY() will
return 19; however, this is far less common than the former
result.
title: version: date: text:
title: INDEXING WITH STR() OR SUBSTR() FUNCTIONS
version: 10 11 DR
date: 10 Mar 1986
text:
Although the length argument of the STR() and SUBSTR() functions
is optional, it must be included when either of these functions
is used as part of an INDEX expression. Otherwise, the error
message "Record is not in index" will occur when using either
BROWSE, EDIT or GO/GOTO.
title: INDEX WITH SET UNIQUE ON
version: 10 11 DR
date: 10 Mar 1986
text:
INDEXing on a numeric field with SET UNIQUE ON may produce an
incorrect count on the screen display. The actual index file is
correct. The counter will be correct if you INDEX use the
STR(fieldname,length).
USE Test
DISPLAY STRUCTURE
Number of data records: 608
Field, Field name, Type, Width, Dec
1 One Numeric 4 0
2 Two Character 5
3 Three Character 5
** Total ** 15
SET UNIQUE ON
INDEX ON One TO Test
536 records indexed * incorrect count
INDEX ON STR(One,4) TO Test1
42 records indexed * correct count
title: INDEX AND BLANK DATES
version: 10 11 DR
date: 10 Mar 1986
text:
A database file that is INDEXed on a date field will put blank
dates at the bottom rather than the top of the index file. To
work around this problem, use the following index expression
instead of the date field:
INDEX ON STR(YEAR(Date),4) + STR(MONTH(Date),2);
+ STR(DAY(Date),2) TO <filename>
Using this expression, you will also be able to INDEX on date and
character fields simultaneously. For example:
INDEX ON STR(YEAR(Date),4) + STR(MONTH(Date),2);
+ STR(DAY(Date),2) + Last_name TO <filename>
This command will create an index file that is in chronological
order by Date and in alphabetical order by Last_name.
title: FIND &MEMVAR WITH TRAILING BLANKS
version: 10 11
date: 10 Mar 1986
text:
FIND &memvar will return "No find" if there are trailing spaces
following the memory variable. This occurs if the FIND is in a
command file or issued at the dot prompt. Trailing blanks are
concatenated to a macro when the FIND command is used. With the
additional trailing blanks, the new character string might not be
found. The following example uses a data file with the field
NAME-C-10, indexed on this field, and a record with "RALPHxxxxx"
in the Name field. The character "x" represents a blank.
STORE "RALPH" TO memvar
FIND &memvar<cr> (This FINDs record 1)
FIND &memvarx<cr> (Still OK - "RALPHx"is record 1)
FIND &memvarxxxxxx<cr> (No find - 6 trailing blanks
exceeds field width)
If less than the entire string is searched for, FIND will never
work with the trailing blank. For example:
STORE "RAL" TO memvar
FIND &memvar<cr> (This finds record 1)
FIND &memvarx<cr> (No find - "RALx" is not in
the file)
The workaround is to use the SEEK command. For example,
SEEK memvar
title: EXPONENTIATION DISPLAY
version: 10 11 DR
date: 10 Mar 1986
text:
When raising an expression to a power in dBASE III, an overflow
condition will arise if both the exponent and the expression are
literal numbers greater than or equal to 10. For example:
. ? 10^10
*************
To work around this problem, STORE either the expression or the
exponent to a memory variable. For example:
. num = 10
. ? 10^num
10000000000.00
title: EJECT AND SET PRINT ON WITH PRINTER OFF-LINE
version: 10 11 DR
date: 10 Mar 1986
text:
EJECT and SET PRINT ON may lock the computer if the printer is not
activated. The dBASE III User Manual warns that this may happen in
the command section under both of these commands.
If the printer power is on but the printer is off-line, issuing a
<command> TO PRINT will give the following error message:
Write fault error writing device PRN
Abort, Retry, Ignore?
This is an MS-DOS error message. Therefore, if you Abort, you will
leave dBASE III and be left at the operating system level. The proper
way to recover is to put the printer on-line and then Retry.
title: EDIT
version: 10 11 DR
date: 10 Mar 1986
text:
If BROWSE is used on an indexed file and is terminated with a
Ctrl-Q or Ctrl-W and followed with an EDIT command, keys which
advance or regress through the database file (PgUp,
PgDn, uparrow, downarrow, Ctrl-E, Ctrl-R, Ctrl-C) will not work
properly.
Sometimes these keys will drop the user out of EDIT to the dot
prompt. Other times they will move two or three records instead
of one. The display will sometimes lock on the current record.
These keys may also cause the pointer to be positioned at
the next to last record in the index.
title: DO WHILE WITH AN EXTRA ENDDO
version: 10
date: 10 Mar 1986
text:
If an extra ENDDO is added to a command file, an infinite loop
will result. For example, the following program will execute
until Esc is pressed:
number = 0
DO WHILE number < 10
@ 10,10 SAY "Now at loop " + STR(number,2)
STORE number + 1 TO number
ENDDO
ENDDO <--- This ENDDO has no matching DO WHILE.
RETURN
We recommend you use some method of indentation for the control
structures: DO CASE...ENDCASE, DO WHILE...ENDDO, and IF...ENDIF
to avoid this problem. This practice will make command files
more readable, and will allow for quick visual checking for
accuracy of nested control structures. In our example, two
consecutive ENDDO statements with the same left margin is a
definite indication that something is wrong.
When using the command DISPLAY OFF in conjunction with TO PRINT
and no specified scope in a command file, the DISPLAY will have
an extra line-feed between each line. For example:
SET HEADING OFF
DO WHILE .NOT. EOF()
DISPLAY OFF <Field1>, <Field2> TO PRINT
SKIP
ENDDO
will yield:
<value1> <value2>
<----------- extra line-feed
<value1> <value2> |
<-------
<value1> <value2>
title: DO WHILE WITH RETURN
version: 10 11 DR
date: 10 Mar 1986
text:
A RETURN statement inside a DO WHILE...ENDDO construction will
not close the DO WHILE <condition> in the program as it does in
dBASE II. Therefore, the <condition> will continue to be
evaluated. For example:
* A.PRG
expA = "1"
DO WHILE expA = "1"
? "Hi!"
DO B ---------------> * B.PRG
ENDDO expB = "2"
* EOF: A.PRG DO WHILE expB = "2"
? "How are you?"
expA = "X"
RETURN
ENDDO
* EOF: B.PRG
Executing A.PRG will cause an infinite loop. It appears dBASE
III continues to test the condition of expB. In order to work
around this, B.PRG should be written as follows:
* B.PRG (revised).
expB = "2"
DO WHILE expB = "2"
? "How are you?"
expA = "X"
EXIT <----- Notice, the EXIT here,
ENDDO
RETURN <----- and the RETURN here.
* EOF: B.PRG
title: DO WHILE WITH SEMICOLON
version: 10 11
date: 10 Mar 1986
text:
When a DO WHILE conditional statement is continued to a second
line with a semicolon, dBASE III tries to execute this second
line the second time through the loop. When the ENDDO is
encountered and the condition evaluates as true, program flow
proceeds to this second line, resulting in the error message,
"*** Unrecognized command verb." For example:
* ---This program will give an error message
* ---when "Y" is entered at the WAIT prompt.
answer = 'Y'
number = 1
DO WHILE number < 10;
.AND. answer = 'Y'
? number
WAIT '"Y" to continue ' TO answer
number = number + 1
ENDDO
If "Y" is entered at the WAIT prompt, dBASE III tries to execute
".AND. answer = 'Y'." However, if the semicolon is deleted and
the line is allowed to wrap at column 67 in MODIFY COMMAND,
execution flows correctly.
title: DO WHILE WITH RESTORE
version: 10 11 DR
date: 10 Mar 1986
text:
If a memory variable tested in a DO WHILE loop is recreated in
the loop by RESTOREing the variable FROM a memory file, the loop
will continue to run even after the condition no longer evaluates
as true (.T.). The program below will run endlessly as long as
the control variable is not the first entry in the memory file:
var = .T.
DO WHILE var
RESTORE FROM Memfile <--- This overwrites var at the
same memory location.
var = .F. <--- This change is ignored if
ENDDO the previous assignment
statement changed the
memory location of the
variable.
RESTOREing ADDITIVE ameliorates the problem.
title: DO COMMAND FILE IN PROCEDURE ON TI PROFESSIONAL
version: 11
date: 10 Mar 1986
text:
With a procedure file open, attempting to DO any command file
will result in a "*** Syntax error ***." For example,
the command file below will produce the error.
SET PROCEDURE TO Test1
DO Routine <---------------- Routine is a procedure
DO Nonproc <-------------| in Test1.
RETURN |
|-- This is a separate
command file.
DO Routine will execute; however, DO Nonproc will produce the
error message. This problem has been reported on the TI PRO
version of dBASE III only. This will not produce an error on the
IBM PC version.
title: CTOD()
version: 10 11
date: 10 Mar 1986
text:
If a date type memory variable is created with a blank date and
the month contains less than two spaces, the result will be
11/30/99. This occurs only if the month positions are incorrect.
If the day and year positions are incorrectly initialized, the
result is the expected, / / .
Month position incorrect:
date = CTOD(" / / ")
^ One space instead of two.
The result: 11/30/99
Day and year positions incorrect:
date = CTOD(" //")
The result: / /
title: CREATE AND ALIAS
version: 10 11
date: 10 Mar 1986
text:
After you CREATE a file, you must USE it again in order to
establish the file name as the default alias name. Otherwise,
the file name will have no alias name assigned to it. For
example:
CREATE File_one
* ---Enter file structure.
* ---Add a few records.
DISPLAY STATUS
* ---No alias name appears.
SELECT 2
USE New_file
SELECT File_one
* ---Gives "Alias not found" message.
title: CREATE <FILENAME>
version: 10 11 DR
date: 10 Mar 1986
text:
(1) In dBASE III, a legitimate file name may contain up to eight
characters consisting of an initial letter, and any combination
of letters, numbers, and underscores. However, special
characters ($,#,-,@,+,etc.) in the name will cause an error
message if an <Alias> -> <Fieldname> is used. For example:
USE Names
SELECT 2
USE Test-it
SELECT Names
? Test-it -> Fieldname
Variable not found
?
? Test-it -> Fieldname
(2) When creating a database file, if <RETURN> is pressed in the
first field of the screen and editing is then resumed by pressing
any key other than <RETURN>, the structure of the file saved will
be corrupted. LISTing the STRUCTURE may lock the machine.
[1.0, 1.1]
title: COPY TO <FILENAME> SDF
version: 10 11
date: 10 Mar 1986
text:
If the database file being copied has a MEMO field, the data in
the fields following the MEMO field will either not be copied or
will be copied incorrectly.
To work around this problem, use the FIELDS phrase in the COPY
command. For example:
COPY TO <filename> FIELDS <field list> SDF
title: COPY TO <FILENAME> DELIMITED WITH WITHOUT DELIMITER
version: 10 11
date: 10 Mar 1986
text:
Using COPY TO <filename> DELIMITED WITH without a delimiter is
not trapped as an error and will cause one of two problems: (1)
if there is a space after the WITH, the error "Unrecognized
phrase/keyword in command" is displayed; (2) if there is no
space, the file is copied but the target file will contain all
blank records.
This problem was discovered in an attempt to build a comma
separated file in which the character strings were not enclosed
in delimiters. Currently, the COPY command does not have this
capability. You can, however, create a comma separated file in
which the character strings are delimited with a blank. The
syntax is:
COPY TO <filename> DELIMITED WITH BLANK
title: COPY TO <FILENAME> DELIMITED
version: 10 11
date: 10 Mar 1986
text:
If a database file structure contains a large number of character or
numeric fields with a length of one, the COPY TO <filename>
DELIMITED command will produce unreliable results. For example, a
file with 29 one-character fields will produce a text file with the
following record:
1,"A","A","A",1,1,"A","A","A","A","A",1,1,1,1,1,1/
,"A","A","A",",",",,,",","
The last fields in the record have been garbled.
title: COPY [STRUCTURE] TO <FILENAME> WITH SET SAFETY
version: 10 11
date: 10 Mar 1986
text:
The COPY [STRUCTURE] TO <filename> command ignores the status of
SET SAFETY if it is issued in a command file. It will overwrite
the target database file without warning. There are two
work-arounds for this problem. The first work-around is to use
the COPY FILE command instead. You will have to CLOSE the source
database before this command can be used. The other work-around
is to use the FILE() function to check for the existence of the
target file before issuing the COPY TO command. For example:
overwrite = .F.
IF FILE( "Temp.DBF" )
@ 10,0 SAY "File already exists, overwrite it? (Y/N)";
GET overwrite
READ
ELSE
overwrite = .T.
ENDIF
IF overwrite
COPY TO Temp
ENDIF
title: CONFIG.DB WITH TEDIT OR WP
version: 10 11
date: 10 Mar 1986
text:
Config.db will not accept more than eight characters for WP
or TEDIT. Any more than eight will be truncated. Attempting to
use MODIFY COMMAND (or to edit a MEMO field) will briefly display
the operating system message "Bad command or file name" and drop
the user to the dBASE dot prompt (or to the edit screen). dBASE
III warns the user that the filename is truncated when dBASE is
initialized. For example:
TEDIT=B:DFORMAT
^--- truncated
To work around this problem, place the word processor in the same
drive and directory or rename the wordprocessor with fewer
characters.
title: CONFIG.DB WITH SCOREBOARD
version: 10 11
date: 10 Mar 1986
text:
The entry SCOREBOARD=OFF has no effect if set in CONFIG.DB.
SETing the SCOREBOARD OFF suppresses the display of status and
error messages to line 0 . The SCOREBOARD setting can only be
changed from a command file or the dot prompt with the command
SET SCOREBOARD OFF.
title: CLOSE PROCEDURE
version: 10 11 DR
date: 10 Mar 1986
text:
If CLOSE PROCEDURE is included inside a procedure file, the
procedure will stop running. The correct place to include the
CLOSE PROCEDURE command is inside the calling program.
title: CTRL-C WHILE PRINTING
version: 10 11
date: 10 Mar 1986
text:
If Ctrl-C is pressed while dBASE III is printing, the user is returned
to the operating system. LIST TO PRINT, DISPLAY TO PRINT, and
operations performed with SET PRINT ON and REPORT FORM TO PRINT are
affected in this way.
title: BROWSE
version: 10 11
date: 10 Mar 1986
text:
It appears that dBASE III does not release the memory used by
BROWSE when the command is terminated. As a result, using many
consecutive BROWSE commands will cause dBASE III to run out of
memory and display the error message "Insufficient memory." The
exact number will depend on how much memory is available. Once
the error message occurs, the only way around the problem is to
QUIT out of dBASE. CLEAR MEMORY will not solve the problem.
title: BROWSE, APPENDING IN
version: 10 11 DR
date: 10 Mar 1986
text:
Records seem to disappear when you use the APPEND option in BROWSE. To see
this, go into BROWSE, then add a record, butdo not fill in all of the fields.
The record number of the status line will be <n>. Press PgDn to add another
record. The record previously added disappears and the record number will be
one less than the previous number. Fill in some of the fields again, but this
time press Return through therest of the fields.Check the record number, then
press the Up Arrow key, then PgDn, and the missing record reappears with the
proper record number restored.
title: AVERAGE PRODUCES LINEFEEDS
version: 10 11
date: 10 Mar 1986
text:
See SUM.
title: ASSIST WITH EXACTLY 27 FIELDS
version: 10 11
date: 10 Mar 1986
text:
Choosing an option in ASSIST that allows a FOR/WHILE clause
(AVERAGE, DISPLAY, REPORT, etc...) on a database of exactly 27
fields, will not allow the last several fields to be used as part
of the FOR/WHILE clause if the down arrow key is used to access
those fields. Everything will appear fine until the last group
of fields is displayed on the screen, at which point pressing the
down arrow will take you to the next menu screen.
Note that this anomaly only occurs on a database file with
exactly 27 fields. It is possible to access the last several
fields by way of the PgDn and down arrow keys; but, it is much
easier to MODIFY the STRUCTURE of the database file to add
another field which avoids the problem altogether.
title: ASSIST
version: 10 11
date: 10 Mar 1986
text:
If the status of SET INTENSITY is OFF, ASSIST will be difficult
to use. This is due to the fact that ASSIST relies on the
options being in reverse video and yet neglects to change the
status of the intensity parameter.
title: APPEND FROM
version: 10 11 DR
date: 10 Mar 1986
text:
(1) When using the APPEND FROM command, if the SDF file which is being
read in has a 00 hex, any data for that record which appears after the
00 hex will not be added. If each record starts with a 00 hex,
records will be APPENDed but they will all be blank.
(2) If you APPEND FROM a DELIMITED text file that contains a space
after a numeric field and before the comma, a zero will appear in the
field following the numeric field. The blank space is apparently read
as a separate field with a value of zero.
Please note that Framework version 1.0 generates a text file of this
format, which will be APPENDed incorrectly by dBASE III. Framework
version 1.1 no longer terminates numeric fields in a text file with
blanks. Such files will be APPENDed correctly by dBASE III.
[1.0, 1.1]
title: APPEND WITH A FORMAT FILE
version: 10 11
date: 10 Mar 1986
text:
Attempting a full-screen APPEND with a format file that does not match
the database file will occasionally hang the computer or return the
user to the dot prompt.
title: APPEND
version: 10 11
date: 10 Mar 1986
text:
dBASE III allows the user to move back into previously existing
records when using the interactive APPEND. If an index file is
in use and key fields are edited in this manner,the index is no
updated with the new key field values. The database file will
have to be REINDEXed.
title: APPEND (OR INSERT)
version: 10 11 DR
date: 10 Mar 1986
text:
(1) If a file has so many fields that it requires more than one
screen during full-screen APPEND (or INSERT), pressing Return in
response to a numeric field on any screen other than the first
will not display a zero in that field. This is strictly a
cosmetic problem that will manifest itself only in the
full-screen mode. That is, if you use CHANGE or EDIT, the field
will appear blank, but ?, DISPLAY, and LIST will display the
field as a zero.
(2) When using full-screen APPEND (or INSERT), issuing a Ctrl-W
or a Ctrl-End in the first character of a blank record will write
the record to the file before leaving the full-screen mode. This
is inconsistent with the original version (1.00) of the product.
To work around this problem, use either Return, Ctrl-Q, or Esc to
exit the full-screen mode.
title: ADDITION
version: 10 11
date: 10 Mar 1986
text:
Adding 50 or more numbers together in a single command line will lock the
computer, requiring a cold boot. For example, the command ? 1+1+1...+N,
where N is the 50th number, will produce the correct answer, then freeze the
computer.
title: ?? COMMAND
version: 10 11
date: 10 Mar 1986
text:
Outputting a memo field with the ?? command in a program
may produce undesirable results. The first time the command
is encountered, the memo field will display correctly.
Thereafter, only the first line of the memo field will
display correctly. All subsequent lines will be offset to
the right. For example, this program:
DO WHILE .NOT. EOF()
USE Test
?? Memo_fld
SKIP
ENDDO
will output:
The first memo field that prints will print out
correctly.
The second memo field will display like this if there
is more than one line.
^---------The second and subsequent
lines are displaced.
title: & FUNCTION
version: 10 11 DR
date: 10 Mar 1986
text:
The macro (&) function will not expand properly if it is
followed by a space and parentheses. For example:
STORE 'LIST FOR' TO x
STORE 10 TO memvar
&x Field1 = memvar
will execute properly, but,
&x (Field1 - memvar) * memvar = 0
will return the "*** Unrecognized command verb" error message.
This problem can be avoided by terminating the macro-substituted
memory variable with a period. For example,
&x. (Field1 - memvar) * memvar = 0
will work. It is always a good idea to terminate a macro with a
period.
title: @...SAY...PICTURE "@Z"
version: 10 11
date: 10 Mar 1986
text:
The zero-suppress function, @Z, will not suppress the decimal
point when it is used with a non-integer value of zero. To work
around this display problem, use the following command sequence
instead of the @Z function.
IF STR( number, 5, 2 ) <> " 0.00"
@ 10,0 SAY number
ENDIF
title: @...SAY...PICTURE LOGICAL VARIABLE
version: 10 11 DR
date: 10 Mar 1986
text:
There is no PICTURE clause that applies to a logical variable
in an @...GET command. However, if you attempt to use a PICTURE
clause on a logical field or memory variable, dBASE III will not
trap it as an error. When the READ is executed, dBASE III will
not pause for user input, and the value of the field or variable
will not be changed.
One possible occurrence of this is when a memory variable is
declared PUBLIC but is not initialized before an @...GET command.
(dBASE III will automatically initialize a PUBLIC memory variable
to a logical .F.) If the variable was not intended to be a
logical variable, the above symptoms will manifest themselves.
You may want to use the SPACE() function to initialize character
variables and zero to initialize numeric variables.
title: @...SAY...PICTURE "@A" AND "@!"
version: 10 11 DR
date: 10 Mar 1986
text:
The A and ! PICTURE clause functions are mutually exclusive.
That is, you cannot combine the two to make a new function that
will limit data input to alphabetic characters and force the
letters to uppercase. If A and ! are used together, only the
second function will be in effect. For example:
PICTURE "@A!" is equivalent to PICTURE "@!"
PICTURE "@!A" is equivalent to PICTURE "@A"
title: @...SAY...PICTURE "@X" AND "@C"
version: 10 11 DR
date: 10 Mar 1986
text:
The C and X functions documented in the manual reference to
the @...SAY command will always display positive numbers as
credits (CR) and negative numbers as debits (DB). Use the
following program segment if you need them to display in the
reverse order (that is, positive numbers as debits (DB) and
negative numbers as credits (CR)):
DO CASE
CASE number > 0
@ row,col SAY STR(number,17,2) + "DB"
CASE number < 0
@ row,col SAY STR(-number,17,2) + "CR"
OTHERWISE
@ row,col SAY STR(number,17,2)
ENDCASE
title: @...SAY...PICTURE "$", ",", AND "9"
version: 10 11 DR
date: 10 Mar 1986
text:
Using the template symbols "$", ",", and "9" in an @...SAY
PICTURE clause may cause more than one dollar sign to be
displayed on the screen. Specifically, if the value being
displayed does not fill positions in the display string preceding
the comma position, a dollar sign will be displayed in place of
the comma.
For example:
mem = 123456
@ 10,0 SAY mem PICTURE "$999,999,999"
@ 11,0 SAY mem PICTURE "$999,999,999,999"
will output:
$ $123,456
$ $ $123,456
The PICTURE template, ($), is intended to replace leading zeros
in a numeric display with dollar signs. This means that dollar
signs should always display in a fixed position format. To
display a fixed position dollar sign leading a numeric expression
with embedded commas, use two @...SAY commands, one to display
the dollar sign and the other to display the numeric variable
with the embedded commas. For example,
mem = 1234.56
@ 10,10 SAY "$"
@ ROW(),COL() + 1 SAY mem PICTURE "99,999.99"
If you wish a leading dollar sign that is floating for numeric
variables with embedded commas, a feature not directly supported
by dBASE III, use the following command file to format the
numeric variables.
* Commas.PRG
PARAMETERS mem
mvar = SUBSTR( STR( mem, 9, 2 ), 1, 3 ) + ",";
+ SUBSTR( STR( mem, 9, 2 ), 4, 3 );
+ SUBSTR( STR( mem, 9, 2 ), 7, 3 )
cntr = 1
DO WHILE SUBSTR( mvar, cntr, 1 ) $ ", "
cntr = cntr + 1
ENDDO
cnum = SPACE( cntr - 1 ) + "$" + SUBSTR( mvar, cntr )
@ 10,0 SAY cnum
* EOP Commas.PRG
STORE 1234.56 TO x
DO Commas WITH x
outputs:
$1,234.56
This formula will work with numbers as large as $999,999.99.
Larger numbers require that the length argument of the STR()
function and the length and starting point arguments of the
SUBSTR() function be changed to accommodate the larger number.
For numbers as large as $999,999,999.99 the second line of the
preceding program should be changed to:
mvar = SUBSTR( STR( mem, 12, 2 ), 1, 3 ) + ",";
+ SUBSTR( STR( mem, 12, 2 ), 4, 3 ) + "," ;
+ SUBSTR( STR( mem, 12, 2 ), 7, 3 ) +;
SUBSTR( STR( mem, 12, 2 ), 10, 2 )
This problem persists in the Developer's Release including both
the PICTURE clause and the TRANSFORM() function. The
work-arounds are a little bit easier given some new functions
including TRANSFORM() itself. To display a numeric expression
with a leading dollar sign in fixed position and embedded commas
concatenate a dollar sign to the result of the TRANSFORM() of the
numeric expression. For example,
mem = 1234.56
@ 10,10 SAY "$" + TRANSFORM( mem, "99,999.99" )
To display a floating dollar sign leading a numeric expression
with embedded commas, insert the dollar sign into the result of
the TRANSFORM() function on the numeric expression. For example,
mem = 1234.56
@ 10,10 SAY SPACE(10-LEN(LTRIM(TRANSFORM(mem,"99,999.99"))));
^--------- Length of the TRANSFORM() picture.
+ "$" + TRANSFORM(mem,"99,999.99")
It is important to note that the first element in the SPACE()
function argument must be the length of the TRANSFORM() picture. If,
for example, the picture is "999", then the element is three.
title: @...SAY...PICTURE "@("
version: 10 11 DR
date: 10 Mar 1986
text:
Displaying negative numeric memory variables with the @...SAY
command and the PICTURE function "@(" to enclose negative numbers
in parentheses, will not display the PICTURE correctly. Blanks
will display between the beginning parenthesis and the memory
variable contents. For example:
number = 23.15
@ 10,10 SAY number PICTURE "@("
( 23.15)
The workaround is as follows:
STORE STR( number, 12, 2 ) TO mem1
^------------ Use an appropriate length
and decimal value.
STORE AT( "-", mem1 ) TO mpos
@ 10,10 SAY SPACE(mpos-1) + "(" + SUBSTR(mem1,mpos+1) + ")"
(23.15)
title: @...SAY...GET
version: 10 11 DR
date: 10 Mar 1986
text:
When entering numbers to the right of the decimal place of
numeric fields, typing the period will sometimes cause the cursor
to jump back to the beginning of the field. This problem
manifests itself only when using a database file with one or more
index files. The problem will also occur using APPEND, BROWSE,
CHANGE, and EDIT.
There are numerous work-arounds for this anomaly, but not all of
them work all of the time. First, try reducing the number of
buffers used in Config.sys to between 12 and 15. If this doesn't
solve the problem and you are using an Autoexec.bat file, try
removing the batch file from your boot disk. Finally, if there
is a DEVICE=ANSI.SYS entry in Config.sys, try removing the entry.
Note: You will need to reboot the machine in order for any of
these changes to take effect.
If text is printed to the screen with @...SAY, and then an
@...SAY...GET is printed to the same line without erasing it first,
characters from the previous text will appear between the SAY and
the GET. For example:
STORE '123' TO mem
@ 10,0 SAY 'XXXXXXXXXXXX'
@ 10,0 SAY 'A' GET mem
displays:
AX123XXXXXXX
^---------------- This should not be displayed.
If you attempt to do a GET at a location greater than or
equal to 80, the error message "SAY/GET position is off the
screen" will be displayed. However, if you issue an
@...SAY...GET that places the first character of the GET field in
column 80, the machine will lock, requiring a warm boot. For
example:
STORE 'TEST' TO test
@ 10,78 SAY 'x' GET test
Note that this problem occurs only in this one instance. If the
column coordinate in the above example is changed to 79, no error
message is displayed and the GET wraps around to the next line on
the screen.
title: @...GET ALIAS IN FORMAT FILE
version: 10 11 DR
date: 10 Mar 1986
text:
Any command that allows editing of a record will only
operate in the SELECTed work area. However, attempting an
@...SAY...GET using an ALIAS or SELECT to access another work
area in a format (.FMT) file will not produce an error message.
Instead, the entire line is suppressed, including the SAY
statement. The Developer's Release of dBASE III will return the
"Variable not found" error message if any attempt is made to GET
a field from another work area. In versions 1.0 and 1.1 of dBASE
III, the command:
@ 10,4 SAY "Testing " GET B->Test
in a format file will not display anything on the screen.
Issuing this command from the dot prompt or in a command file
will return "Variable not found." An alias name is acceptable in
a SAY statement, even in a format file.
@ 10,4 SAY "Testing " + B->Test
will display properly.
Notice that in the first example neither the SAY nor the GET
pertaining to the second work area are displayed.
108 item(s) found