找到并锁定

每当你创造一条记录时,你都可以获得一把锁。

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.