Rewritebykey
This instruction updates a record at a given key after checking for edit conflicts. It compares the Updtick value of the [F] record with the updtick value of the corresponding database record, and it updates the database record only if the two ticks are equal.
This instruction allows CRUD operations to work safely in a multi-user environment without locking resources. The operation fails if the database record got modified after the [F] record had been read.
The fstat
variable is set by this instruction. A status other than 0 indicates a failure.
This instruction requires an abbreviation, an index, and a key value.
File
declaration.Order By Key
clause.All of these elements are optional.
File
declaration, or the table declared by the last Default File
instruction.Order By
index if present; otherwise, the default value is the first index of the table.RewriteByKey [abbreviation]index = key_valueRewriteByKey =
# Procedure that updates the currency code for a given customer only if the customer is activeSubprog CHANGE_CUSTOMER_CURRENCY(CUST_CODE, NEW_CURR, ERR_CODE, ERR_MESSAGE)Const Char CUST_CODE(), NEW_CURR()Variable Integer ERR_CODEVariable Char ERR_MESSAGE()# Declare the tableIf !clalev([BPC])Local File BPCUSTOMER [BPC]Endif# Read the recordRead [BPC]BPCNUM=CUST_CODEIf fstat : ERR_CODE=fstat : ERR_MESSAGE="Customer"-CUST_CODE-"not found" : End : Endif# Check if the condition is fulfilledIf [BPC]BPCSTA=1 : ERR_CODE=8 : ERR_MESSAGE="Customer"-CUST_CODE-"not active" : End : Endif# Update the record[BPC]CUR=NEW_CURRRewriteByKey [BPC]BPCNUM=CUST_CODE# Check the fstat valueERR_CODE=fstatCase ERR_CODEWhen 0 : ERR_MESSAGE="Operation succeeded"When 1 : ERR_MESSAGE="Customer record is locked"When 3 : ERR_MESSAGE="Attempt to create a duplicate key"When 6 : ERR_MESSAGE="Customer record was modified"When 7 : ERR_MESSAGE="Customer record does not exist"EndcaseEnd
Value | Explanation |
---|---|
0 | Operation succeeded |
1 | Record is locked |
3 | Duplicate value on unique index |
6 | Update conflict |
7 | Record does not exist |