ANOMALIES UPLOADED ON 6-6-89 ANOMALY 12.TXT The following listing addresses two known anomalies when using dBASE IV. Use of these techniques will aid you in avoiding anomalies that have been reported to our Software Support Center. There are also two usage-tips that may be used in order to avoid further problems or misunderstandings when using the dBASE IV product. This report will be supplemented as new information is received. ******************************************************************* ANOMALIES Renaming a .DBO will cause "Procedure not found" error If a compiled .DBO file is renamed, the resultant file cannot be run. Attempting to do so will return the error, "Procedure not found .prs". This fact should have been documented under the commands DO, COMPILE, and BUILD/DBLINK. Since every program file becomes its own main procedure file and, in addition, when a file is compiled its name becomes compiled into the resultant .DBO, simply renaming a file will not change the references to the original filename in the .DBO file. When the newly named file calls itself as a main procedure, this name is not the same as the filename of the main procedure compiled into the .DBO and the error is returned. Rather than renaming the .DBO file, the .PRG should be renamed prior to compiling. =================================================================== CONVERT requires exclusive use of the file The CONVERT command requires that the file to be CONVERTed be used in EXCLUSIVE mode. On page 4-4 of Networking with dBASE IV, CONVERT TO is correctly included in the list of commands requiring exclusive use. This requirement is not documented on pages 2-59 or 60 of Language Reference nor page 4-13 of Networking with dBASE IV. USAGE-TIPS @M will override other templates and functions The multiple choice picture function, @M, uses the literal values provided in the picture clause. Therefore, The @M function will override any other picture or template function used in conjunction with it. EXAMPLE: STORE SPACE(20) TO Part_name @10,10 GET Part_name PICTURE "@M! Sofa, Bed, Chair" This example always returns the options as initial caps only instead of all caps. Therefore, the enumerated data must be entered in all upper-case within the picture template if an upper-case template is desired. =================================================================== SCAN...ENDSCAN and how records are moved within the construct The SCAN ... ENDSCAN construct is meant to handle record positioning itself. It varies from the DO WHILE ... ENDDO construct in the sense that a DO WHILE is a looping mechanism, doing a certain operation multiple times. DO ... WHILE does not automatically change the record pointer, where-as in a SCAN ... ENDSCAN construct, the record pointer update is handled internally. SCAN DO WHILE .NOT. EOF() ... ... is equivalent to SKIP ... ... ENDSCAN ENDDO Therefore, having the record pointer repositioned within the SCAN ... ENDSCAN construct may cause the record pointer to be improperly adjusted. EXAMPLE: USE SCAN While .T. LIST NEXT 10 IF EOF() GO TOP ENDIF CLEAR ENDSCAN The example above is intended to list 10 records at a time, doing consecutive passes through the database. The first record of the database is only listed during the first pass through the file. After the IF EOF() statement, GO TOP positions the record pointer at the top of the database, but since ENDSCAN internally changes the record pointer, a second SKIP is issued and the LIST command will start on the second record of the file.