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