PROGRESS语言
PROGRESS语言是一种非可视化的编程语言,符合4GL规范,具有高级语言的优点,可以进行条件选择(IF、WHERE)、嵌套循环(FOR)、计算(如求和、求平均)等操作,还可以直接进行打印、显示(PUT、DISPLAY),并且不区分大小写。
PROGRESS源程序一般由4部分组成:全局变量定义、图形变量定义(一般是用户指定的查询选择条件)、输出数据的格式和主程序(如何利用数据库中的字段生成用户需要的正确数据)。
全局变量的定义
全局变量用DEFINE VARIABLE 关键字定义。格式如下:
DEFINE VARIABLE W1 LIKE(数据格式INTEGER,CHARACTER……)
DEFINE VARIALBE W2 AS VARIABLE2
使用AS可以直接引用已经定义好的数据格式。比如我们要把某个变量定义成和表中的字段类型一致时,可直接定义如下:
DEFINE VARIALBE1 AS 表中定义的字段
这样我们就不用再到后台数据库中去查询该字段的数据格式,提高了编程速度。如果这个变量在调用过程中也要用到,则分别定义如下:
//在主过程中
DEFINE SHARED VARIABLE W1 LIKE (数据格式INTEGER,CHARACTER……)
//在调用过程中
DEFINE NEW SHARED VARIABLE W1 LIKE (数据格式INTEGER,CHARACTER……)
变量的主要数据类型如下表所示:
数据类型 缺省格式 示例
字符型(Character) X(8) Dongnan
日期型(Data) 99/99/99 03/02/99
布尔型(Logical) Yes/No Yes
浮点型(Decimal) ->>,>>9.99 12.00
整型(Integer) ->,>>>,>>.9 12
图形变量的定义
图型变量的定义主要是把已经定义好的变量在界面上显示出来。
/*账户余额查询报表中部分源程序*/
FORM /* 显示一个FORM */
/* 定义一个相当于容器的框 */
RECT-FRAME AT ROW 1 COLUMN 1.25
RECT-FRAME-LABEL AT ROW 1 COLUMN 3 NO-LABEL VIEW-AS TEXT SIZE-PIXELS 1 BY 1
SKIP(.1) /*GUI*/
/* 把变量entity的选择条件显示出来*/
entity colon 25 label ‘会计单位’ entity1 colon 50 label “至”
cname colon 25 label‘摘要’
acc colon 25 label ‘账户’acc1 colon 50 label “至”
sub colon 25 label ‘分账户’ sub1 colon 50 label “至”
ctr colon 25 label ‘成本中心’ ctr1 colon 50 label “至”
begdt colon 25 label ‘生效日期’ enddt colon 50 label “至”
subflag colon 25 label ‘汇总分账户’
ccflag colon 25 label ‘汇总成本中心’
rpt_curr colon 25 label ‘货币’
with frame a side-labels attr-space width 80
NO-BOX THREE-D /*GUI*/
cname colon 25 label ‘摘要’
第一行在窗口中的显示如下:
摘要
方框中是供用户输入的选择条件。
报表格式的定义
报表格式的定义非常简单,只要用at和to标出相对位置即可:
FORM /*GUI*/ header
“期初借方余额” to 65
“期初贷方余额” to 85
“期间活动金额” to 92
“借方活动金额” to 109
“贷方活动金额” to 128
“期末借方余额” to 148
“期末贷方余额” to 164 skip
“Account Description” at 1
“账户 摘要 ” at 1
“--------------- ” at 1
“---------------” to 85
“-------------- ” to 134
“-------------- ” to 164
with STREAM-IO /*GUI*/ frame phead1 page-top width 186.
at和to 表示数据在frame phead1 上的相对位置。不同之处在于,at后边的数据表示从该点开始,而to后边的数据表示到该点结束。特别要注意的是,在PROGRESS中,只能画横线,不能画竖线。
数据处理
对于数据的处理,本文主要介绍如何读取数据,以及在编程时需要注意的地方。
我们以账户余额查询报表为例。当在数据库的表中查找数据时,使用下述语句:
FOR EACH (表) WHERE (条件)
//对表中数据进行处理
//对符合条件的每个数据进行处理
END
只访问表中指定的一个数据:
FIND FIRST OR LAST (表) WHERE (条件)。
//对表中数据进行处理
END。
查找条件之间用OR 或者AND 连接。
在PROGRESS中,有两对语句FIRST 和FIRST-OF、LAST和LAST-OF,这两个判断语句非常重要,常用于判断循环的开始还是结束以及循环中的分类是开始还是已经结束。
FIRST(BREAK-GROUP ):当前的循环是循环体的第一次循环则返回TRUE,如果不是则返回FALSE;
FIRST-OF(BREAK-GROUP ):当前的循环是循环中的分类的第一次循环则返回TRUE,如果不是则返回FALSE;
LAST(BREAK-GROUP ):当前的循环是循环体的最后循环则返回TRUE,如果不是则返回FALSE;
LAST-OF(BREAK-GROUP ):当前的循环是循环中的分类的最后一次循环则返回TRUE,如果不是则返回FALSE。
如果程序需要处理大量的数据,可以使用调用过程。调用过程可以采用*.P或者*.I文件。它们的区别在于*.I文件是包含文件,在编译时不生成相应的*.R文件;而*.P文件生成相应的*.R文件。
注意:如果在过程中多次使用到同一个表,必须定义一个BUFFER格式:
DEFINE BUFFER WW LIKE (表名)
WW为表的别名。如果不定义BUFFER,编译时将出现“TABLE 无法辨别!”的警告。
PROGRESS语言是一种非可视化的编程语言,符合4GL规范,具有高级语言的优点,可以进行条件选择(IF、WHERE)、嵌套循环(FOR)、计算(如求和、求平均)等操作,还可以直接进行打印、显示(PUT、DISPLAY),并且不区分大小写。
PROGRESS源程序一般由4部分组成:全局变量定义、图形变量定义(一般是用户指定的查询选择条件)、输出数据的格式和主程序(如何利用数据库中的字段生成用户需要的正确数据)。
全局变量的定义
全局变量用DEFINE VARIABLE 关键字定义。格式如下:
DEFINE VARIABLE W1 LIKE(数据格式INTEGER,CHARACTER……)
DEFINE VARIALBE W2 AS VARIABLE2
使用AS可以直接引用已经定义好的数据格式。比如我们要把某个变量定义成和表中的字段类型一致时,可直接定义如下:
DEFINE VARIALBE1 AS 表中定义的字段
这样我们就不用再到后台数据库中去查询该字段的数据格式,提高了编程速度。如果这个变量在调用过程中也要用到,则分别定义如下:
//在主过程中
DEFINE SHARED VARIABLE W1 LIKE (数据格式INTEGER,CHARACTER……)
//在调用过程中
DEFINE NEW SHARED VARIABLE W1 LIKE (数据格式INTEGER,CHARACTER……)
变量的主要数据类型如下表所示:
数据类型 缺省格式 示例
字符型(Character) X(8) Dongnan
日期型(Data) 99/99/99 03/02/99
布尔型(Logical) Yes/No Yes
浮点型(Decimal) ->>,>>9.99 12.00
整型(Integer) ->,>>>,>>.9 12
图形变量的定义
图型变量的定义主要是把已经定义好的变量在界面上显示出来。
/*账户余额查询报表中部分源程序*/
FORM /* 显示一个FORM */
/* 定义一个相当于容器的框 */
RECT-FRAME AT ROW 1 COLUMN 1.25
RECT-FRAME-LABEL AT ROW 1 COLUMN 3 NO-LABEL VIEW-AS TEXT SIZE-PIXELS 1 BY 1
SKIP(.1) /*GUI*/
/* 把变量entity的选择条件显示出来*/
entity colon 25 label ‘会计单位’ entity1 colon 50 label “至”
cname colon 25 label‘摘要’
acc colon 25 label ‘账户’acc1 colon 50 label “至”
sub colon 25 label ‘分账户’ sub1 colon 50 label “至”
ctr colon 25 label ‘成本中心’ ctr1 colon 50 label “至”
begdt colon 25 label ‘生效日期’ enddt colon 50 label “至”
subflag colon 25 label ‘汇总分账户’
ccflag colon 25 label ‘汇总成本中心’
rpt_curr colon 25 label ‘货币’
with frame a side-labels attr-space width 80
NO-BOX THREE-D /*GUI*/
cname colon 25 label ‘摘要’
第一行在窗口中的显示如下:
摘要
方框中是供用户输入的选择条件。
报表格式的定义
报表格式的定义非常简单,只要用at和to标出相对位置即可:
FORM /*GUI*/ header
“期初借方余额” to 65
“期初贷方余额” to 85
“期间活动金额” to 92
“借方活动金额” to 109
“贷方活动金额” to 128
“期末借方余额” to 148
“期末贷方余额” to 164 skip
“Account Description” at 1
“账户 摘要 ” at 1
“--------------- ” at 1
“---------------” to 85
“-------------- ” to 134
“-------------- ” to 164
with STREAM-IO /*GUI*/ frame phead1 page-top width 186.
at和to 表示数据在frame phead1 上的相对位置。不同之处在于,at后边的数据表示从该点开始,而to后边的数据表示到该点结束。特别要注意的是,在PROGRESS中,只能画横线,不能画竖线。
数据处理
对于数据的处理,本文主要介绍如何读取数据,以及在编程时需要注意的地方。
我们以账户余额查询报表为例。当在数据库的表中查找数据时,使用下述语句:
FOR EACH (表) WHERE (条件)
//对表中数据进行处理
//对符合条件的每个数据进行处理
END
只访问表中指定的一个数据:
FIND FIRST OR LAST (表) WHERE (条件)。
//对表中数据进行处理
END。
查找条件之间用OR 或者AND 连接。
在PROGRESS中,有两对语句FIRST 和FIRST-OF、LAST和LAST-OF,这两个判断语句非常重要,常用于判断循环的开始还是结束以及循环中的分类是开始还是已经结束。
FIRST(BREAK-GROUP ):当前的循环是循环体的第一次循环则返回TRUE,如果不是则返回FALSE;
FIRST-OF(BREAK-GROUP ):当前的循环是循环中的分类的第一次循环则返回TRUE,如果不是则返回FALSE;
LAST(BREAK-GROUP ):当前的循环是循环体的最后循环则返回TRUE,如果不是则返回FALSE;
LAST-OF(BREAK-GROUP ):当前的循环是循环中的分类的最后一次循环则返回TRUE,如果不是则返回FALSE。
如果程序需要处理大量的数据,可以使用调用过程。调用过程可以采用*.P或者*.I文件。它们的区别在于*.I文件是包含文件,在编译时不生成相应的*.R文件;而*.P文件生成相应的*.R文件。
注意:如果在过程中多次使用到同一个表,必须定义一个BUFFER格式:
DEFINE BUFFER WW LIKE (表名)
WW为表的别名。如果不定义BUFFER,编译时将出现“TABLE 无法辨别!”的警告。

