RELEASE statement

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.

Syntax

RELEASE record[ NO-ERROR ]
record
The name of a record buffer.

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.

NO-ERROR
The NO-ERROR option is used to prevent the statement from raising ERROR and displaying error messages.

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.

Example

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.

Notes

See also

NO-ERROR option