找到並鎖定
每當你創造一條記錄時,你都可以獲得一把鎖。
NO-LOCK:用於只讀操作。如果你做了 FIND <record> NO-LOCK
,你不能以任何方式修改記錄。
FIND FIRST Customer NO-LOCK NO-ERROR.
EXCLUSIVE-LOCK:用於更新和刪除。如果你這樣做,你將擁有記錄,沒有其他人可以修改或刪除它,直到你完成。只要你沒有刪除它,它們就可以讀取它(沒有鎖定)。
FIND FIRST Customer EXCLUSIVE-LOCK NO-ERROR.
分享:不惜一切代價避免。這會引起瘋狂的頭痛。
FIND FIRST Customer EXCLUSIVE-LOCK NO-ERROR. //Do this instead.
將鎖從 NO-LOCK 升級到 EXCLUSIVE-LOCK
如果需要修改記錄,你可以輕鬆地從 NO-LOCK
移動到 EXCLUSIVE-LOCK
:
FIND FIRST Customer NO-LOCK NO-ERROR.
// Some code goes here
// Now we shall modify
FIND CURRENT Customer EXCLUSIVE-LOCK NO-ERROR.
你也可以從 EXCLUSIVE-LOCK 轉到 NO-LOCK。
鎖定的記錄
每當其他使用者可能獲得鎖定記錄時,你最好考慮這種可能性。會發生碰撞!
最好使用 NO-WAIT
語句以程式設計方式處理此問題。這告訴 AVM 如果記錄被其他人鎖定則只傳遞 FIND 並讓你處理這個問題。
FIND FIRST Customer EXCLUSIVE-LOCK NO-ERROR NO-WAIT.
/* Check for availability */
IF AVAILABLE Customer THEN DO:
/* Check that no lock (from somebody else) is present */
IF NOT LOCKED Customer THEN DO:
/* Do your stuff here */
END.
ELSE DO:
MESSAGE "I'm afraid somebody else has locked this record!" VIEW-AS ALERT-BOX ERROR.
END.
END.