找到並鎖定

每當你創造一條記錄時,你都可以獲得一把鎖。

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.