Verifies that a record complies with mandatory field and unique index definitions. It clears the record from the buffer and unites it to the database if it has been changed.
To use RELEASE with a record in a table defined for multiple databases, you must qualify the record's table name with the database name. See the record definition in the Record phrase reference entry for more information.
For the RELEASE statement, as an exception to the general rule, if a unique index constraint is violated the NO-ERROR clause is ignored when validating the record. An error is raised before any changes are saved to the record to avoid damaging any indexes.
The following example uses a browse widget to scan Customer records. Records within the browse are read with NO-LOCK. If you choose the Update Customer button, the CHOOSE trigger starts a transaction and applies an EXCLUSIVE-LOCK to the Customer record. When you have completed any updates, the procedure displays the new values in the browse widget and then executes a RELEASE statement. This ensures that the lock is released when the transaction ends.
r-rels.p
DEFINE VARIABLE methRtn AS LOGICAL NO-UNDO. DEFINE VARIABLE curr-cust AS ROWID NO-UNDO. DEFINE BUTTON upd-cust LABEL "Update Customer". DEFINE BUTTON exit-app LABEL "Exit". DEFINE QUERY seq-cust FOR customer. DEFINE BROWSE brow-cust QUERY seq-cust DISPLAY Customer.CustNum Customer.Name WITH 10 DOWN. FORM upd-cust exit-app SKIP(1) brow-cust WITH FRAME main-frame. FORM Customer EXCEPT Customer.Comments WITH FRAME curr-frame COLUMN 40. OPEN QUERY seq-cust FOR EACH Customer. ON VALUE-CHANGED OF brow-cust DO: DISPLAY Customer EXCEPT Customer.Comments WITH FRAME curr-frame SIDE-LABELS. curr-cust = ROWID(Customer). END. ON CHOOSE OF upd-cust DO: /* TRANSACTION */ FIND Customer WHERE ROWID(Customer) = curr-cust EXCLUSIVE-LOCK. UPDATE Customer WITH FRAME cust-frame VIEW-AS DIALOG-BOX TITLE "Customer Update". methRtn = brow-cust:REFRESH(). DISPLAY Customer EXCEPT Customer.Comments WITH FRAME curr-frame SIDE-LABELS. RELEASE Customer. END. ENABLE ALL WITH FRAME main-frame. APPLY "VALUE-CHANGED" TO brow-cust. PAUSE 0 BEFORE-HIDE. WAIT-FOR CHOOSE OF exit-app OR WINDOW-CLOSE OF DEFAULT-WINDOW. |
If you omit the RELEASE statement in this example, the EXCLUSIVE-LOCK is downgraded to a SHARE-LOCK at the end of the transaction. This prevents other uses from updating that record. The SHARE-LOCK is released when you change the iteration of the browse.