AS400开发入门-By adan 联系客服

发布时间 : 星期三 文章AS400开发入门-By adan更新完毕开始阅读

C EVAL *INLR = '1' C RETURN C S#001 BEGSR C 'A1>A2' DSPLY C GOTO ENDPGM C ENDSR C S#002 BEGSR

4.程序操作:

BEGSR: 子程序开始 ENDSR: 子程序结束 EXSR: 执行子程序 例:

SUB0001 BEGSR

EXSR SUB0001

???. ENDSR

注释:每一个程序中都可以有一个特殊的子程序*INZR,它无论被放在程序的什么部分都会被首先执行

*INZR BEGSR ??? ENDSR

程序例外出错检测子程序,当程序发现例外出错时,自动执行该子程序,做出下一步处理

*PSSR BEGSR 。。。 ENDSR

DABC S 3 0 DIM(10) DX S 2 0 C C MOVEA 1 ABC(X) C ABC(1) DSPLY C C ENDPGM TAG C EVAL *INLR = '1' C RETURN C C *PSSR BEGSR C 'SYS ERR' DSPLY C GOTO ENDPGM C ENDSR

61676237.doc – 第 13 页 共 39 页

5. 调用和转移操作:

CALL: 调用一个外部程序,该程序可以是RPG、CL或C程序等 CALL 'COUNT' PARM P1 PARM P2 RETRN/RETURN: 返回上一层程序,

6. 文件操作:

A. CHAIN: 用纪录号或键值从一个文件查找,如果文件是使用I方式打开的话,此操作不会在记录上加锁;如果使用U方式打开的话,就会。 MOVE ‘ABCD’ WWACNO

N1N2N3 WWACNO CHAIN FACNO(记录格式名) 8899 *IN88 IFEQ ‘1’

(RPG IV)或 IF *IN88 = ‘1’ (RPG IV)或 IF *IN88

(RPG IV)或 IF NOT %FOUND

MOVE ‘FER0001’ WWMGID GOTO ENDPGM ENDIF

*IN99 IFEQ '1' 纪录被锁 MOVE 'FER0002' WWMGID GOTO ENDPGM ENDIF ?? ENDPGM TAG

MOVE '1' *INLR RETRN

ACKEY KLIST

KFLD WWACNO KFLD WWSBNO MOVE ‘ABC’ WWACNO Z-ADD 10 WWSBNO

ACKEY CHAIN(N) FACNO(记录格式名) 8899 仅查找,不锁记录 *IN88 IFEQ '1'

MOVE 'FER0001' WWMGID GOTO ENDPGM ENDIF

*IN99 IFEQ '1'

MOVE 'FER0002' WWMGID

61676237.doc – 第 14 页 共 39 页

GOTO ENDPGM ENDIF ??.. ENDPGM TAG

MOVE '1' *INLR RETRN

B. CLOSE: 关闭文件(通常情况下,如果是注明用户打开的文件,在程序结束之前要CLOSE将文件关闭,如果是系统自动打开的文件,在程序结束时会自动关闭) CLOSE ACNOA(文件名)

C. OPEN: 打开文件,在程序对多成员文件进行操作时一般需要由用户自行打开和关闭数据文件

OPEN ACNOA(文件名)

D. COMIT/COMMIT: 文件修改落实,在文件定义(F表)中指明文件要由落实机制控制(COMMIT参数)

E. ROLBK/ROLBK : 文件修改回滚,在文件定义(F表)中指明文件要由落实机制控制(COMMIT参数)

F. DELET/DELETE: 删除记录

DELET FACNO(记录格式名)

G. EXFMT: 显示输出一个显示记录,并从标准输入读取数据 EXFMT CHOICE(一般文件显示记录格式名)

H. READ: 读一条记录

N1N2N3 READ FACNO(记录格式名) 99 *IN99 IFEQ '1'

(RPG IV)或 IF %EOF(到文件末)

MOVE 'FRD0001' WWMGID GOTO ENDPGM ENDIF

I. READE: 从当前记录位置开始寻找一个等于键字的记录,并读取 MOVE ‘A124’ WWACNO

N2N3

WWACNO READE FACNO 8899

*IN88 IFEQ '1' 纪录被锁

MOVE 'FER0002' WWMGID GOTO ENDPGM ENDIF

*IN99 IFEQ '1' 无匹配记录

(RPG IV)或 IF *IN99 = ‘1’ (RPG IV)或 IF *IN99

(RPG IV)或 IF NOT %FOUND

MOVE 'FER0003' WWMGID GOTO ENDPGM

61676237.doc – 第 15 页 共 39 页

N2N3 8899 纪录被锁

MOVE 'FER0002' WWMGID GOTO ENDPGM ENDIF

*IN99 IFEQ '1' 遇到文件头

(RPG IV)或 IF %BOF(到文件末)

MOVE 'FER0003' WWMGID GOTO ENDPGM ENDIF

K. SETLL: 从文件第一条记录开始逐条查询,直到找到第一条符合条件的记录,此记录的键字大于或等于FACTOR1指定的键值。但只是将文件指针指向此记录的上方,并不读出(可以使用READ读下一记录)。

L. SETGL: 从文件第一条记录开始逐条查询,直到找到第一条符合条件的记录,此记录的键字大于FACTOR1指定的键值。但只是将文件指针指向此记录的下方,并不读出(可以使用READP将上一条记录读出)。 例如:

有一物理文件:学生成绩表,记录格式名为RSTT,字段属性是,成绩GRADE(3S0)、姓名NAME(10 O),成绩是键值,储存数据如下:

成绩(K) 姓名 80 张一 85 张二 88 张三 88 李一 92 李二

显示将成绩大等于90的学生姓名(结果只有显示李二)

MOVE 90 CJ 3 0

CJ SETLL RSTT(记录格式名) READ RSTT DO 1 IF %EOF LEAVE ENDIF GRADE DSPLY

READ RSTT ENDDO

显示将成绩小等于85的学生姓名(结果显示张二和张一) MOVE 85 CJ 3 0

CJ SETGT RSTT(记录格式名)

61676237.doc – 第 16 页 共 39 页

J. READP: *IN88 ENDIF

读取当前记录位置的上一条记录 READP FACNO IFEQ '1'