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

pma*_*tin 5 progress-4gl

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

DEFINE BUFFER Customer FOR Customer. 
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

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

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

Gor*_*son 8

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

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

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

procedure p2:
    find last customer no-lock.
end.
Run Code Online (Sandbox Code Playgroud)

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

Obv还有其他原因来定义缓冲区,但是当您看到定义与表名称相同的缓冲区的代码时,通常是关于范围的.

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

find first <buffername>.
Run Code Online (Sandbox Code Playgroud)

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