ANOMALIES UPLOADED ON 5-22-89 ANOMALY10.TXT The following listing addresses four 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 is also one Usage Tip 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 SPOOL not available in dBASE IV The SPOOL command is not available in Novell versions 2.10 and above. dBASE IV is certified to run only on versions 2.1x. Page D-7 of Network Installation illustrates a sample Login script which initializes a print spooler with the command #SPOOL. The proper command to activate a spooler in a login script in 2.1x is #CAPTURE. Novell versions 2.0x used the SPOOL command syntax. There are other places that reference SPOOL, such as on page 2-5 of Network Installation, and page GS-7 of Getting Started, where printer device selections list \\SPOOLER as an option. Again, this option is non-functional under the 2.1x environment. ================================================================================ APGEN won't overwrite old .PRG files on a network Regenerating an existing application does not overwrite the associated .PRG files using the Application Generator on a network. Even when you specify Y when asked whether or not to overwrite, the old .PRG files are not overwritten but the newly generated code is appended to the end of the file. WORKAROUND: Delete the .PRG and
.PRG files before regenerating the application. ================================================================================ KEY() <.MDX filename> needs to be a character expression The explanation of the KEY() function is misleading in the "Functions" page 4-65 of Language Reference. The <.MDX filename> argument is a character expression, meaning it should be enclosed in quotes. ================================================================================ ROLLBACK/COMPLETED() do not function as documented The functionality of ROLLBACK in Transaction processing is not the same as stated in the documentation (both on pages 2-229 of Language Reference and on page 4-21 of Networking with dBASE IV.) The same is true of the values returned by the COMPLETED() function. A transaction is a unit of work which contains a sequence of database operations. The transaction processing commands of dBASE IV provide the capability of data recovery if an error occurs during the course of a transaction. The BEGIN TRANSACTION command creates a transaction log file of all changes made to the involved database files during a transaction. The log file(s) (TRANSLOG.LOG in single user operation, WRKSTN#.LOG in multiuser operation) gives the user the ability to set the affected file back to the original values that it contained when the transaction began. This is done via the ROLLBACK command. (See Chapter 3, "Transaction Processing" in Networking with dBASE IV.) The ROLLBACK command sets all involved files back to their original, consistent state, as if the transaction never occurred. However, the ROLLBACK command behaves like an END TRANSACTION command in that the transaction log file resets the involved files to their original states, the transaction is ended, the log file is deleted and the program continues on to the line following the END TRANSACTION command. The documentation is incorrect in stating that a ROLLBACK command will leave the transaction open and active. Another consideration with the ROLLBACK command is that it functions much like a RETURN or DEACTIVATE MENU command - it causes an immediate return from the procedure in which it is contained so that any commands that are located after the ROLLBACK command will never be executed. As stated above, program command will continue on to the line after the END TRANSACTION command. Consequently, many of the examples in the documentation in Networking with dBASE IV Chapter 3 are incorrect (e.g. on pages 3-4 and 3-7). The documented return values of the COMPLETED() function are also inaccurate. COMPLETED() tests whether a transaction has ended successfully or not. If the END TRANSACTION command was issued, COMPLETED() will be set to a true value and the log file will be deleted. If a ROLLBACK has occurred, the changes made during the transaction are aborted, hence COMPLETED() will return a false value (.F.). It also returns a false when tested within a transaction procedure, since the transaction is in progress. The function does not return a .T. after a ROLLBACK command, as documented. Two other important functions should be discussed: ISMARKED() and ROLLBACK(). ISMARKED() tests whether or not a file is in an inconsistent state; either a transaction is in progress or perhaps the program never finished and the transaction log file still exists. If ISMARKED() is set to .T. because an error occurred, a ROLLBACK may be required. The ROLLBACK() function returns a default value of .T. and will also return .T. after a successfully completed ROLLBACK command. If a ROLLBACK command fails to reset the files to their original states for any reason, ROLLBACK() will return a false value. The transaction processing functions return the following values: ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Transaction status: COMPLETED() ISMARKED() ROLLBACK() ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ In the middle of a Transaction: (a) .F. .T. .T. After a completed Transaction: (b) .T. .F. .T. After a completed ROLLBACK: (b) .F. .F. .T. If the ROLLBACK fails: (b) .F. .T. .F. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ (a) - Tested in an error procedure (b) - Tested after the END TRANSACTION ================================================================================ USAGE-TIP BROWSE:Fields:Blank Field on index key field is dimmed The menu option BROWSE:Fields:Blank field is dimmed, that is, unavailable on a master index key field. However, when the cursor is on that key field, the contents may be changed manually. In order to blank a master key field within BROWSE, cursor to that field and then press {Ctrl-Y} or {Ctrl-T}.