我在很多地方都遇到过这段代码:
DEFINE BUFFER Customer FOR Customer.
我有两个问题:
这样做的目的是什么?为什么创建与表同名的缓冲区是有益的?
在编写代码访问此表/缓冲区时,Progress 是如何知道是直接访问 DB 还是通过缓冲区访问?
我在很多地方都遇到过这段代码:
DEFINE BUFFER Customer FOR Customer.
我有两个问题:
这样做的目的是什么?为什么创建与表同名的缓冲区是有益的?
在编写代码访问此表/缓冲区时,Progress 是如何知道是直接访问 DB 还是通过缓冲区访问?
1:通常用于管理缓冲区的范围。
例如,如果您有一个包含多个内部过程的过程,它们都访问同一个表,那么该表的默认缓冲区将最终限定为顶级过程块。例如 -
procedure p1:
find first customer no-lock.
end.
procedure p2:
find last customer no-lock.
end.
最终会将客户缓冲区的范围限定为包含过程。如果你试图让你的内部程序保持松散耦合和自包含,那么你可能不想要这种行为。因此,您将在每个内部过程中定义一个缓冲区。
Obv 定义缓冲区还有其他原因,但是当您看到定义与表同名的缓冲区的代码时,通常与范围有关。
2:总是通过缓冲区访问DB。每个表都有一个与表同名的默认缓冲区,所以
find first <buffername>.
将查找名为 buffername 的缓冲区,该缓冲区可能是显式定义的缓冲区或隐式默认缓冲区。如果存在,优先级将转到明确定义的缓冲区。