|
DISPLAY — Moves the values of fields or variables into the screen buffer and displays them (#1 in the figure)
|
|
PROMPT-FOR — Prompts the user for data and puts that data into the screen buffer (#2 in the figure)
|
|
ASSIGN — Moves data from the screen buffer to the record buffer (#3 in the figure)
|
UPDATE
[ UNLESS-HIDDEN ]
[ field [ format-phrase ] [ WHEN expression ]
| TEXT ( field [ format-phrase ] ... )
| field = expression
| constant [ AT n | TO n ]
| ^
| SPACE [ ( n ) ]
| SKIP [ ( n )]
] ...
[ GO-ON ( key-label ... ) ]
[ frame-phrase ]
[ editing-phrase ]
[ NO-ERROR ]
|
UPDATE record
[ EXCEPT field ... ]
[ frame-phrase ]
[ NO-ERROR ]
|
Updates the field only when expression has a value of TRUE. The
expression is a field name, variable name, or expression whose value is logical.
Defines a group of character fields or variables (including array elements) to use automatic word wrap. The TEXT option works only with character fields that are ABL default FILL-IN widgets (not specified with the FILL-IN NATIVE option). When you insert data in the middle of a TEXT field, the AVM wraps data that follows into the next TEXT field, if necessary. If you delete data from the middle of a TEXT field, the AVM wraps data that follows to the empty area. If you enter more characters than the format for the field allows, the AVM discards the extra characters. The character fields formats must be in the x(n) format. A blank in the first column of a line marks the beginning of a paragraph. Lines within a paragraph are treated as a group and will not wrap into other paragraphs.
Table 63 lists the keys you can use within a TEXT field and their actions.
Indicates that the value of field is determined by evaluating the expression rather than having it entered on the screen or from a file. In effect, an assignment statement is embedded in the UPDATE statement.
Identifies the number (n) of blank spaces to insert after the expression displays. The
n can be 0. If the number of spaces you specify is more than the spaces left on the current line of the frame, the AVM starts a new line and discards any extra spaces. If you do not use this option or do not use
n, the AVM inserts one space between items in the frame.
Identifies the number (n) of blank lines to insert after the expression is displayed. The
n can be 0. If you do not use this option, the AVM does not skip a line between expressions unless they do not fit on one line. If you use the SKIP option, but do not specify
n or if
n is 0, the AVM starts a new line unless it is already at the beginning of a new line.
[ LABEL : ] EDITING : statement ... END
|
Suppresses ABL errors or error messages that would otherwise occur and diverts them to the
ERROR-STATUS system handle. If an error occurs, the action of the statement is not done and execution continues with the next statement. If the statement fails, any persistent side-effects of the statement are backed out. If the statement includes an expression that contains other executable elements, like methods, the work performed by these elements may or may not be done, depending on the order the AVM resolves the expression elements and the occurrence of the error.
|
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.
|
|
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.
|
|
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.
|
The r-updat2.p procedure reads each Customer record and lets you update the
Name and
CreditLimit fields. The VALIDATE option on the first UPDATE statement ensures that you enter a
CreditLimit value that is less than 500000. The HELP option displays a message to that effect.
FOR EACH Customer:
UPDATE Customer.Name
Customer.CreditLimit VALIDATE(Customer.CreditLimit < 500000, "Too high")
HELP "Enter CreditLimit < 500000".
FOR EACH Order OF Customer:
DISPLAY Order.OrderNum.
UPDATE Order.PromiseDate Order.ShipDate VALIDATE(Order.ShipDate > TODAY,
"Ship date must be later than today").
END.
END.
|
|
If any field is a field in a database record, the UPDATE 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 UPDATE statement rereads the complete record before updating it. If any field is not part of the field list (or related fields) fetched with the record, or if record includes such unfetched fields, the AVM raises the ERROR condition before the UPDATE statement accepts input. This is because the UPDATE attempts to display the fields before it rereads the record.
|
|
If you receive input from a device other than the terminal, and the number of characters read by the UPDATE statement for a particular field or variable exceeds the display format for that field or variable, the AVM returns an error. However, if you are setting a logical field that has a y/n format and the data file contains a value of YES or NO, the AVM converts that value to “y” or “n”.
|
|
The UPDATE statement causes ASSIGN and WRITE events to occur and all related database ASSIGN and WRITE triggers to execute. The ASSIGN triggers execute before the WRITE triggers and after the field is actually updated. The WRITE triggers only execute if the ASSIGN triggers do not return an error. If an ASSIGN trigger fails, the database update is undone. This means that all database changes are backed out. If the UPDATE statement occurs within a transaction, any changes to variables, worktable fields, and temp-table fields are also undone unless the variable or field is defined with the NO-UNDO option. Likewise, if a WRITE trigger fails, the UPDATE statement is undone.
|
|
In Progress Version 7 and above, when you execute UPDATE with a specific or implied GO-ON( keylabel) from a called program, the AVM generates an error message (4123). This is due to an incompatibility in focus. The workaround is to add a VIEW FRAME statement after the call to the subprocedure such that the VIEW FRAME is the first statement executed on return from the called procedure.
|
|
In the context of the .NET blocking method, System.Windows.Forms.Application:Run( ), if you directly or indirectly execute the UPDATE statement while displaying a non-modal ABL window, in certain contexts (such as within a user-defined function or non- VOID method) this statement execution raises the STOP condition. For more information on the .NET Application:Run( ), method, see the reference entry for the WAIT-FOR statement (.NET and ABL).
|