| 
       CREATE DATABASE new-database  FROM old-database  NEW-INSTANCE  
        REPLACE NO-ERROR | 
 Check the ERROR-STATUS:ERROR attribute to see if the AVM raised the ERROR condition.
Check the ERROR-STATUS:ERROR attribute to see if the AVM raised the ERROR condition.
   Check if the ERROR-STATUS:NUM-MESSAGES attribute is greater than zero to see if the AVM generated error messages. ABL handle methods used in a block without a CATCH end block treat errors as warnings and do not raise ERROR, do not set the ERROR-STATUS:ERROR attribute, but do add messages to the ERROR-STATUS system handle. Therefore, this test is the better test for code using handle methods without CATCH end blocks. ABL handle methods used in a block with a CATCH end block raise ERROR and add messages to the error object generated by the AVM. In this case, the AVM does not update the ERROR-STATUS system handle.
Check if the ERROR-STATUS:NUM-MESSAGES attribute is greater than zero to see if the AVM generated error messages. ABL handle methods used in a block without a CATCH end block treat errors as warnings and do not raise ERROR, do not set the ERROR-STATUS:ERROR attribute, but do add messages to the ERROR-STATUS system handle. Therefore, this test is the better test for code using handle methods without CATCH end blocks. ABL handle methods used in a block with a CATCH end block raise ERROR and add messages to the error object generated by the AVM. In this case, the AVM does not update the ERROR-STATUS system handle.
   Use ERROR-STATUS:GET-MESSAGE( message-num ) to retrieve a particular message, where message-num is 1 for the first message.
Use ERROR-STATUS:GET-MESSAGE( message-num ) to retrieve a particular message, where message-num is 1 for the first message.
   NO-ERROR does not suppress errors that raise the STOP or QUIT condition.
NO-ERROR does not suppress errors that raise the STOP or QUIT condition.
   A CATCH statement, which introduces a CATCH end block, is analogous to a NO-ERROR option in that it also suppresses errors, but it does so for an entire block of code. It is different in that the error messages are contained in a class-based error object (generated by the AVM or explicitly thrown), as opposed to the ERROR-STATUS system handle. Also, if errors raised in the block are not handled by a compatible CATCH block, ON ERROR phrase, or UNDO statement, then the error is not suppressed, but handled with the default error processing for that block type.
A CATCH statement, which introduces a CATCH end block, is analogous to a NO-ERROR option in that it also suppresses errors, but it does so for an entire block of code. It is different in that the error messages are contained in a class-based error object (generated by the AVM or explicitly thrown), as opposed to the ERROR-STATUS system handle. Also, if errors raised in the block are not handled by a compatible CATCH block, ON ERROR phrase, or UNDO statement, then the error is not suppressed, but handled with the default error processing for that block type.
   When a statement contains the NO-ERROR option and resides in a block with a CATCH end block, the NO-ERROR option takes precedence over the CATCH block. That is, an error raised on the statement with the NO-ERROR option will not be handled by a compatible CATCH end block. The error is redirected to the ERROR-STATUS system handle as normal.
When a statement contains the NO-ERROR option and resides in a block with a CATCH end block, the NO-ERROR option takes precedence over the CATCH block. That is, an error raised on the statement with the NO-ERROR option will not be handled by a compatible CATCH end block. The error is redirected to the ERROR-STATUS system handle as normal.
   If an error object is thrown to a statement that includes the NO-ERROR option, then the information and messages in the error object will be used to set the ERROR-STATUS system handle. This interoperability feature is important for those integrating code that uses the traditional NO-ERROR technique with the newer, structured error handling that features error objects and CATCH end blocks.
If an error object is thrown to a statement that includes the NO-ERROR option, then the information and messages in the error object will be used to set the ERROR-STATUS system handle. This interoperability feature is important for those integrating code that uses the traditional NO-ERROR technique with the newer, structured error handling that features error objects and CATCH end blocks.
  | 
       DEFINE VARIABLE dbname AS CHARACTER NO-UNDO LABEL "Database" FORMAT "x(65)".
        /* Prompt the user for the name of a demo database to connect. */ SET dbname HELP "Enter the name of your database." WITH FRAME dbname-frame SIDE-LABELS. /* If the entered name does not have the .db suffix, add it. This is necessary for the search function to work correctly. */ IF LENGTH(dbname) < 3 THEN dbname = dbname + ".db". ELSE IF SUBSTRING(dbname, LENGTH(dbname) - 2) = ".db" THEN dbname = dbname + ".db". /* If the database does not exist, create it from Sports2000. */ IF SEARCH(dbname) = ? THEN DO: MESSAGE "Database does not exist. Do you want to create it?" VIEW-AS ALERT-BOX QUESTION BUTTONS YES-NO TITLE "Connect Database" UPDATE create-it AS LOGICAL. IF create-it THEN DO: CREATE DATABASE dbname FROM "Sports2000". MESSAGE "New database created:" dbname. END. ELSE UNDO, RETRY. END. /* Connect the database. */ CONNECT VALUE(dbname) -1. |