已经接触as400有10多天了,觉得很有必要总结一下,日后用得着的时候还可以看看,新手的无奈就在于遇到问题时无从下手,一些自己觉得难以解决的问题,在老手眼中,根本就是些很幼稚的问题,好啦,闲话少说,先总结。
建议一个RPG工程步骤。
1.建议一个library,比如zrplib。 然后在库中建立object ,通常有以下几种object , 数据库定义文件:QDDSSRC , 画面文件:QDSPSRC,RPG程序文件:QRPGSRC,帐票还没学,以后再补上。
这几个文件分别有自己各自的作用,QDDSSRC主要用于建立数据库,在此文件下,建立物理文件和逻辑文件,定义数据库的字段和长度等,用A表描述。
QDSPSRC文件下,建立画面文件,用A表描述。
QRPGSRC文件下,用于写RPG程序,引入以上的数据库文件和画面文件,然后就可以对文件里的变量进行操作啦,不用再定义,可以直接应用,主要有,H表:定义时间,F表:引用文件,E表:定义数组,I表:定义时间的格式,C表:操作,所以重点是C表。
简单的描述了一下文件结构,该说说细节了,免得日后自己用到的时候又难以记起。
1)首先用STRPDM命令,进入编程环境,进入后,用EDTLIBL命令,先加入自己的库名称(zrplib)吧,免得等下编译不通过,报个40级错误,吓人。自己在这点上由于没有注意到,所以几次都载了跟头,疑惑,上次还能编译通过的,怎么这次又不能啦,加上就好啦。
2)进入DEBUG模式,也有一点需要注意,不然一开始就疑惑,为什么我的不能单步调试呀,而其他人又可以,一问才恍然大悟。原来RPG程序中,涉及到有数据WRITE的,输入STRISDB后,进入的画面,有个是否有修改数据项(默认为*NO),把此项设为*YES,就可以了进行单步调试啦。
3)用IF(只读)引入文件时不会被锁住的,而用O(只写)、UF(后面没A,只更新)、UF(后面有A,写/更新)都会锁住文件。
4)在给文件定位时读取时,有点也要注意,引入文件时用UF的,如果CHAIN时,会把文件锁住,按下F4,在H/N/P项下,输入N,表示不锁。(还没试过,有空要试试)
5)如果在编辑一本程序时,要参考其他的程序,既要显示两个窗口。在打开一个画面时,按下SHIFT+F3,然后写上要参考的程序的MEMBER,OBJECT,LIBRARY名即可。
6)RPG程序中,没有局部变量的说法,全部都是全局变量。此外,在画面文件定义功能键(用CF定义,画面上的值可以返回到程序中,用CA定义,不返回,通常用于退出功能键),然后在RPG程序,判断功能键是否被执行(比如F3),用*IN03 IFEQ ’0' 0既表示被执行了,与*OFF对应,‘1’表示没有被执行,与*ON对应。
7)编程时,有错误时在所难免的,那如何查看编译的错误呢。在命令行,输入WRKJOB,然后选择4,进入SP文件,然后选择最后一个就刚刚编译出现错误的文件,选择5查看错误信息,在第一个命令行输入B,跳到最后一页,查看总的错误数。然后再第二行输入错误的序列号,按下SHIFT+F4就可以跳到错误的位置。(都是英文的,现在我终于知道英语一直都是多么重要。)
8)在写入数据库文件,只能用RECORD名,而读数据,既可以用表名,也可以RECORD名。
9)写入的模式
001.00 C CLEAR*****R
002.00 C ** 一些赋值语句比如MOVE A B
003.00 C WRITE*****R
清空的命令,是把字符清为空,而数字变为0
10)MEMBER SIZE的改变
找到对应的OBJECT,按下F10,
Initial number of records 10000 把默认的值设置一下就可以啦
接下来,介绍一些常用的命令:
STRPDM 进入编程环境
EDTLIBL 加入库文件
RUNQRY *N 库名/object名 查看数据库的数据
CTRLIB 对LIBRARY的操作
CRTSRCPF(DBCS *YES) 对OBJECT的操作。注意,如果要写入中文的,把DBCS项设为YES
行命令的使用
- 行的插入( I, In, n=数字 )
- 行的删除( D, Dn, DD )
- 行的复制( 复制内容的指定: C, Cn, CC 复制位置的指定: A, An, B, Bn )
- 行的移动( 移动内容的指定: M, Mn, MM 移动位置的指定: A, An, B, Bn )
- 行的重复复制( 复制内容的指定: CR, CRn, CCR 复制位置的指定: A, An, B, Bn )
- 行的复制( 向空白部分复制, ( 复制内容的指定: C, Cn, CC 复制位置的指定: O, On )
- 一行内容的移动(L, Ln, LL, LLn, R, Rn, RR, RRn )
- 文件内字符串的查找( F14, F ‘字符串’ <F>)
- 文件内字符串的替换( F14, C ‘字符串1’,’ 字符串2’ ALL)
- 其他MEMBER的参照( F15 )
- 编辑内容的保存( F3)
小结完毕。