创建与数据库表同名的缓冲区

时间:2011-03-30 14:44:42

标签: progress-4gl

我在很多地方遇到过这段代码:

DEFINE BUFFER Customer FOR Customer. 

我有两个问题:

  1. 这是什么目的?为什么创建一个与表名相同的缓冲区是有益的?

  2. 在编写访问此表/缓冲区的代码时,Progress如何知道是直接访问数据库还是通过缓冲区访问数据库?

1 个答案:

答案 0 :(得分:8)

1:通常用于管理缓冲区的范围。

例如,如果您有一个具有许多内部过程的过程,这些过程都访问同一个表,那么该表的默认缓冲区将最终作用于顶级过程块。例如 -

procedure p1:
    find first customer no-lock.
end.

procedure p2:
    find last customer no-lock.
end.

最终会将客户缓冲区限定为包含过程。如果您试图保持内部过程松散耦合和自包含,那么您可能不希望出现这种行为。因此,您需要在每个内部过程中定义一个缓冲区。

Obv还有其他原因可以定义缓冲区,但是当你看到代码定义了一个与表同名的缓冲区时,它通常与范围有关。

2:它总是通过缓冲区访问数据库。每个表都有一个与表名相同的默认缓冲区,所以

find first <buffername>.

将查找名为buffername的缓冲区,该缓冲区可以是显式定义的缓冲区或隐式默认缓冲区。如果存在,则优先级将转到显式定义的缓冲区。