Progress
Language Reference
ASSIGN Statement
Moves data previously placed in the screen buffer by a data input statement or moves data specified within the ASSIGN statement by an expression to the corresponding fields and variables in the record buffer.
DATA MOVEMENT
![]()
SYNTAX
[ FRAME frame | BROWSE browse] field
The name of the field or variable (field) to be set from the corresponding value found in the screen buffer or expression. The field must be qualified by a frame name or browse name (frame) if field is specified as an input widget in more than one frame.
expression
An expression that results in an assigned value to the named field. In this case, Progress determines the field value from the expression rather than from the screen buffer.
WHEN expression
Moves data to the record buffer only when the expression used in the WHEN option has a value of TRUE. Here, expression is a field name, variable name, or expression whose value is logical.
NO-ERROR
Specifies that any errors that occur as a result of the assignment are suppressed. After the ASSIGN statement completes, you can check the ERROR-STATUS system handle for information on any errors that might have occurred. If an error occurs, the assignment is canceled and any changes to field values within the assignment are undone. If the assignment occurs within a transaction, any changes to variables, work table fields, and temporary table fields are also undone, unless you define the variable or field with the NO-UNDO option.
record
The record buffer name with the fields set, from the corresponding values in the screen buffer. Naming a record is a shorthand way to list each field in that record individually.
To use ASSIGN with a record in a file defined for multiple databases, you might have to qualify the record’s filename with the database name. See the Record Phrase reference entry for more information.
EXCEPT field
All fields in the record buffer are affected except for those listed. Separate field names with a space.
EXAMPLESThe following procedure prompts you for a customer number and retrieves the customer record if one exists, or creates a new one if it does not exist. If it creates a new record, the value for the cust-num field is ASSIGNed from the value you entered in response to the PROMPT–FOR statement.
The next procedure changes the order number and line number of an order-line record. (It copies an order-line from one order to another.) It sets the new values into variables and modifies the record with a single ASSIGN statement that contains two assignment phrases in the form field = expression. Thus, both fields are changed within a single statement. Because Progress re-indexes records at the end of any statement that changes an index field value, and because order-num and line-num are used jointly in one index, this technique does not generate an index until both values change.
NOTES
- If any field is a field in a database record, the ASSIGN statement upgrades the record lock condition to EXCLUSIVE–LOCK before updating the record.
- If any field is part of a record retrieved with a field list, the ASSIGN statement rereads the complete record before updating it.
- During data entry, a validation expression defined for the field in the database or in a Format phrase executes only if the widget associated with the field receives input focus. Use the VALIDATE( ) method to execute a validation expression defined for a field regardless of whether it receives input focus or not.
- Use an ASSIGN statement after a PROMPT–FOR statement or to write changes from an enabled field to the database. ASSIGN moves the value from the screen buffer into the field or variable.
- Use the PROMPT–FOR statement to receive one or more index fields from the user, and you use the FIND statement to find a record matching those index values. If no record is found, use the CREATE statement to create a new record and use the ASSIGN statement to assign the values the user supplied to the new record.
- You cannot use the SET statement in place of the PROMPT–FOR statement. The SET statement prompts the user for input and then assigns that input to the record in the buffer. However, if there is not a record available, SET cannot assign the values.
- ASSIGN does not move data into a field or variable if there is no data in the corresponding screen field. There is data in a screen field if a DISPLAY of the field was done or if data was entered into the field. If you PROMPT–FOR a field or variable that has not been DISPLAYed in the frame and enter blanks, Progress does not change the field or variable because it considers the screen field changed only if the data differs from what was in the field.
- If an ASSIGN statement references a field or variable that is used in more than one frame, it uses the value in the frame most recently introduced in the procedure.
- If you type blanks into a field that has never displayed data, the ENTERED function returns FALSE and the SET or ASSIGN statement does not update the underlying field or variable. Also, if Progress marks a field as entered, and the PROMPT–FOR statement prompts for the field again and you do not enter any data, Progress no longer considers the field entered.
- If you use a single, qualified identifier with the ASSIGN statement, the Compiler interprets the reference as dbname.filename. If the Compiler cannot resolve the reference as dbname.filename, it tries to resolve it as filename.fieldname.
- Many assignments within a single ASSIGN statement are more efficient than multiple ASSIGN statements. It saves r-code size and improves performance.
- The ASSIGN statement, when used in database fields, causes all related database ASSIGN triggers to execute in the order in which the fields were assigned. The ASSIGN triggers execute after all the assignments have taken place. If an ASSIGN trigger fails (or executes a RETURN statement with the ERROR option), all of the database changes are undone. See the Progress Programming Handbook for more information on database triggers.
SEE ALSO
= Assignment Operator, INPUT Function, PROMPT-FOR Statement, SET Statement, UPDATE Statement
Copyright © 2004 Progress Software Corporation www.progress.com Voice: (781) 280-4000 Fax: (781) 280-4095 |