找到并锁定
每当你创造一条记录时,你都可以获得一把锁。
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.