PROGRESS 4GL - 何时使用 FOR FIRST、CAN-FIND 和 FIND FIRST?

PROGRESS 4GL - When to use FOR FIRST, CAN-FIND and FIND FIRST?

我是 progress 4GL 的新手。我总是愿意编写适当的代码,并愿意了解我们使用的每个关键字的每一端,但遵循给出相同结果的示例查询。我不知道什么时候使用 FIND FIRST、FOR FIRST 和 CAN-FIND?请帮助我重写无可挑剔的答案

FOR EACH Customer NO-LOCK:
    FOR FIRST Order OF Customer:
    /*somelogic*/
    END.
END.

FOR EACH Customer NO-LOCK:
    FIND FIRST Order OF Customer NO-LOCK NO-ERROR.
    IF AVAILABLE Order THEN
    /*somelogic*/
END.

FOR EACH Customer NO-LOCK:
  IF CAN-FIND(FIRST  Order OF Customer ) THEN
  DO:
        /*somelogic*/
  END.
END.

FOR FIRST 将您找到的记录范围限定为一个块。它避免了在块中引用记录时必须检查记录的可用性,因为如果不可用,块将不会执行。

FIND FIRST 永远不应该真正使用。如果有很多记录,您无法控制第一个找到的记录,如果只有一个记录,您应该只使用 FIND 而不是 FIRST。这样代码就解释了预期的内容,您可以测试 AMBIGUOUS 以确保有人没有做傻事。

CAN-FIND 用于检查记录是否存在,而不实际将该记录拉回客户端。缓冲区中将没有可用记录,因此您无法使用该数据。这是一种检查记录是否存在的极好方法,无需通过网络将内容拉回的开销。如果您不关心数据,请使用它。