RPGAS400程序员培训手册9Word下载.docx

上传人:b****5 文档编号:20277232 上传时间:2023-01-21 格式:DOCX 页数:18 大小:29.40KB
下载 相关 举报
RPGAS400程序员培训手册9Word下载.docx_第1页
第1页 / 共18页
RPGAS400程序员培训手册9Word下载.docx_第2页
第2页 / 共18页
RPGAS400程序员培训手册9Word下载.docx_第3页
第3页 / 共18页
RPGAS400程序员培训手册9Word下载.docx_第4页
第4页 / 共18页
RPGAS400程序员培训手册9Word下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

RPGAS400程序员培训手册9Word下载.docx

《RPGAS400程序员培训手册9Word下载.docx》由会员分享,可在线阅读,更多相关《RPGAS400程序员培训手册9Word下载.docx(18页珍藏版)》请在冰豆网上搜索。

RPGAS400程序员培训手册9Word下载.docx

(事实上那个我用得不多)

F15:

将已标记的块MOVE到光标指定处。

(那个用得许多)

F16:

删除已标记的块。

(那个用的频率也许多)

F11:

定义新变量

F23:

进入当前字段的功能菜单画面

6、对新变量的定义,按F11之后,见到画面如下:

Editedlength............:

1

Recordformat............:

RCD001

Numberofkeywords.........:

0

Numberofindicators........:

Typechoices,pressEnter.

Field................FLD001Name

Optionindicators..........01-99,N01-N99

Moreindicators..........NY=Yes,N=No

Startingline............1-255

Startingposition..........61-255,+nn

Lengthofdata...........11-378,+nn,-nn

翻页,还有:

Datatype..............11=Character

2=Zoned

3=Floatingpoint

4=Open

5=Graphic

6=Date

7=Time

8=Timestamp

Decimalpositions..........0-31,+n,-n

Referenceafield..........NY=Yes,N=No

Usereferencedvalues.......YY=Yes,N=No

能够采纳直截了当定义长度、类型的方法,即在第1页的最末尾,Lengthofdata处,

填上字段长度;

假如是字符型,就不需要再填其它内容;

假如是数字型,在第2页Decimal

positions处填上小数位数。

也能够采纳参照字段的方法(即参照已存在的PF文件中的字段)。

假如选用这种

方法,就用需要在Lengthofdata以及Decimalpositions中填写内容,将Referencea

field项填为“Y”,然后按确认键(仿佛F10键也能够),然后能够看到该项高亮显示。

现在再按F10,可进入该字段的功能菜单(也能够通过在报表编辑状态下,直截了当在当前

字段处按F23进入):

OptKeywordOptKeywordOptKeyword

ALIASDFTIGCCHRRTT

BARCODEDLTEDTINDTXT

BLKFOLDEDTCDEMSGCON

CDEFNTEDTWRDPAGNBR

CHRIDFLTFIXDECPRTQLTY

CHRSIZFLTPCNREFFLD

COLORFNTCHRSETSKIPA

CPIFONTSKIPB

CVTDTAHIGHLIGHTSPACEA

DATEIGCALTTYPSPACEB

DATFMTIGCANKCNVTEXT

DATSEPIGCCDEFNTTIME

以上菜单中,标记为蓝色的,是我常用的几个选项。

在这些选项前面,选2,即是对当前字段加注这些功能;

选4,即是去掉这些

功能。

要参照已知字段定义变量,则在“REFFLD”选项前选2,可见

Field...............

Recordformat..........

File...............

Library.............*CURLIB

各选项的含义:

Field:

当前变量所参照的字段

RecordFormat:

当前变量所参照字段,在PF文件中所属的记录格式

File:

PF文件名

Library:

PF文件所在的库名

7、其它几个常用功能选项的含义:

SKIPA:

SkipAfter,在WRITE操作时,写该字段后,自动换页;

SKIPB:

SkipBefore在WRITE操作时,写该字段前,自动换页

SPACEA:

SpaceAfter写该字段后,再打印一个空格;

SPACEB:

SpaceBefore写该字段前,打印一个空格(可用来解决错行问题)

EDTCDE:

定义当前字段的显示方式,比如说当前字段为数字类型时,是否显

示逗号,前面是补零等等。

依照F1键,看Help中的说明:

EditCodeDescriptionNoSignCRSign-Sign(R)-Sign(L)

Commasandzerobalances1AJN

Commas2BKO

Zerobalances3CLP

Nocommasorzerobalances4DMQ

Userdefinededitcodes5-9

DatefieldeditW

DateeditY

SuppressleadingzerosZ

二、编写打印报表的程序

1.对报表文件的声明:

FEF4322POEPRINTEROFLIND(*IN99)

能够看到,操作方式是“O”,即只写;

文件类型为“PRINTER”,即打印文件;

后面的OFLIND关键字表示该报表文件的换页指示器为99;

即写报表,当写

满一页时,*IN99自动变为1;

然后报表自动换页,*IN99再自动变回0;

事实上这一项我觉得操纵起来有点不爽,因此我通常差不多上自行操纵换页,不用这

个指示器来判定;

我常使用的自行操纵换页的方法在下面会说明。

2.对报表文件的处理

和磁盘文件(DISK)一样,报表文件事实上也有OPEN,CLOSE,WRITE的操

作。

只是使用OPEN,CLOSE操作时,不需要使用USROPN关键字。

同时也因为

生成的是脱机文件,因此不能进行CHAIN、UPDATE等定位、修改的操作。

假如在程序中,只需要生成一份报表,那么能够不使用OPEN/CLOSE操作,

因为程序在运行之初,以及运行终止时,已默认打开,关闭了一次所有已声明的文

件,包括报表打印文件。

但假如程序在运行时,需要生成多份报表,那么必须在每次生成报表前使用

OPEN操作;

在生成完报表后,使用CLOSE操作,以保证脱机文件的完整。

在生成完当前报表前,还可能需要使用CHGPRTF的命令,将报表生成到指定

的输出队列中。

假如不更换,那么报表会生成到当前用户默认的脱机文件存放处。

当一个RPGLE中,生成多份同名报表时,常会在生成报表前使用CHGPRTF,以

便于治理,幸免纷乱。

报表的操作,也与磁盘文件(一般PF文件)类似,在OPEN与CLOSE之间,

对各字段进行赋值,赋值完之后再通过“WRITE记录格式名”的语句,来写指

定的记录格式。

3.自行操纵换页

在声明报表时,能够通过OFLINE关键字,定义换页指示器,只是可能是换页

指示器的使用方法我摸索得还不够,因此使用起来总觉得不够自如。

我通常是先在报表文件中,定义一个记录格式(RecordFormat),该记录格式下

只有一个字段,同时那个字段的功能选项处要标识为“SKIPA”,然后该字段尽量

做成不可见字符。

在RPGLE程序中,当程序运行逻辑上判定需要换页时,WRITE

那个记录格式,就能够实现换页了(也确实是通过字段的SKIPA选项来实现换页,

因此大伙儿也能够使用其它更便利的方法,那个地点只是介绍我常用的方法,因为我觉得

那个方法比较稳固)。

至于如何判定换页,因此要看具体报表的需求是如何要求的。

最重要的,是不

要不记得定义一个数字型变量用来统计当前页已打印过的行数,当大于等于60行,

要进行换页处理(我通常会留出几行来做为冗余,大伙儿能够自已选择,但确信不能

大于66行,否则会自动换页)

三、几点补充

呵呵,找出我往常写的关于报表打印的贴子,做为使用时补充

1、关于记录格式

事实上那个本来没什么可说的,只是我就经常搞错,依旧说说吧。

同一个记录格式之下,格式应该如下:

记录格式名

0001.00+打印内容

0002.00+打印内容

0003.00+

每行要有那个+,才归属于同一个记录格式。

假如是个点的话,也确实是说明这一行

并不属于该记录格式,假如想让它属于那个记录格式,就要用CLC命令;

当我们用19编辑的时候,假如是3来COPY记录行,系统经常会自动在COPY处

新增一个记录格式,因此要注意。

(说来简单,然而我最开始画报表的时候,就曾经被

那个问题折磨)

2、关于变量的命名

不同的记录格式,能够使用相同的变量名。

有的时候,为了少写赋值语句,能够直截了当将变量命名得与PF中的字段相同。

(只是我不太喜爱这种做法)

假如在RPGLE程序中,给某个变量赋值,但没有对相应的记录格式进行

WRITE操作,编译会不通过,报4030字段未定义的错。

3、关于打印时会错行的问题

有的时候,打印会错行,比如记录格式定义

0001.00+变量A(比如说10个字符长)

0002.00+变量B(比如说5个字符长)

变量A的起始处位于第一列

变量B在变量A的下一行,且起始处位于第三列

当变量A='

AAAAAAAAAA'

,变量B='

BBBBB'

时,会打印出

AAAAAAAAAA

BBBBB

这专门正常。

但当A='

A'

或空时,本来我们是期望打印出:

A(或者那个地点确实是一空行)

如此的成效,然而系统就会打印成为

BBBBBA或

BBBBB(没有打印出空行)

也确实是说,当某一行的前面为空时,(仿佛空格也算空)假如下一行有数据,就会

挤上来。

解决方法是在将A字段的首位赋值为非空;

假如想让客户看不见,能够考虑

使用汉字指示器。

想打印空行,也能够用那个方法。

又或者是将该字段的功能选项加上“SPACEB”,即打印前空一格,也能够解决这

个问题。

(报表的那个特点困扰我最久)

4、关于报表的测试

事实上那个东西最简单,只是我往常一向专门少去留意。

往常测试报表,专门是测试换页的时候,差不多上老老实实的用打印机去打,打出来了

再检查换页对不对,慢不说,还费纸。

事实上我们进入到SPLF里,查看刚生成的报表文件,右上角就有当前的页数,行数,

如第1页第1行,右上角确实是1/1,第2页第3行,确实是3/2,仿佛页数在后面。

在“positionto”那个地点,+1确实是下一行,W+1确实是向右移一列,慢慢+,就能够看

到换页是否正确了。

8.2SQLRPGLE

在RPG/RPGLE程序中,也是能够使用SQL命令的,第一,需要将程序的类型设置为

SQLRPG或SQLRPGLE,SQL语句的用法都一样,RPG/RPGLE是指非SQL语句使用什

么格式。

这类程序写完之后与一般的RPG/RPGLE程序一样编译,运行。

只是需要注意,SQLRPG编译时有一个“COMMIT”参数,此参数假如没有使用

“*NONE”,或“*NC”,那么SQL语句中更换的表将会由系统默认加一个COMMIT声明。

假如执行RPG程序后没有执行COMMIT操作,那么当时数据是更换过来的,但当用户

SIGNOFF之后,SQL更换的表数据将会回滚(这也是在爱护时期常见的爱护失误之一)。

只是那个参数只会阻碍到SQL语句中做了数据更换的表,可不能阻碍到RPG/RPGLE程序段

中的数据。

1、不带任何参数的SQL:

C/EXECSQL

C+UPDATEPFFHSSETFHS01='

0'

WHEREFHS02=’1’

C/END-EXEC

2、动态游标

C******************************

C*定义动态SQL

C+PREPAREW#SQLFROM:

A

C*

C*执行动态SQL,结果储存到游标C1中

C/EXECSQLDECLAREC1CURSORFORW#SQL

C*打开游标C1

C+OPENC1

C*取数据

C*SQLCODDOUNE*ZERO

C+FETCHC1INTO:

W#FLD1,

C+:

W#FLD2,

W#FLD3

C*ENDDO

C*关闭游标C1

C+CLOSEC1

8.3SAVF,备份与复原

SAVF,全称SAVEFILE,储备文件。

能够将SAVF视为一个储备容器,它能够将指定

的库,或指定的数据文件,或源代码储存在其中,有点类似于UNIX中的TAR。

SAVF只用于备份与复原。

尽管通常这些情况是系统治理员做的,然而假如环境许可的

情形下,开发人员能了解这些命令,自行做做备份,就能够更好地对程序进行测试、爱护源

码。

因此,在使用RESTORE命令时,一定要慎重慎重再慎重,千万不能追求操作速度,切

记切记。

1.建立SAVF

要使用SAVF,第一我们因此需要建立一个SAVF。

如已有自己的SAVF,可跃过此步。

建立SAVF的命令是:

CRTSAVFFILE(库名/SAVF名)

假如建立成功,就会在指定库中,生成一个空的SAVF。

2.清空SAVF

使用SAVF前,必须保证SAVF是空的。

SAVF不能追加内容。

新生成的SAVF一定的

空的,不需要专门处理;

假如是已存在的SAVF,需要使用CLRSAVF的命令,确保清空SAVF

CLRSAVFFILE(库名/SAVF名)

3.将指定的库备份到SAVF中

备份库,使用下列命令来进行备份

SAVLIBLIB(要备份的库名)DEV(*SAVF)SAVF(SAVF所在库名/SAVF名)

ACCPTH(*YES)

ACCPTH(*YES),表示备份时,备份储备路径。

也确实是对应于数据文件,将其逻辑文件

的相关信息也备份下来,会增加备份时刻与备份空间;

但复原时,不需要对逻辑文件重新建

立索引,能够省专门多时刻。

因此在备份数据文件建议加上那个参数。

因此,假如是备份源代

码,就不需要那个参数了。

4.复原已备份的库

RSTLIBSAVLIB(备份的库名)DEV(*SAVF)SAVF(SAVF所在的库/SAVF名)

RSTLIB(复原的库名)

RSTLIB那个参数,表示复原的库名,其默认值等于“备份的库名”。

也确实是说,假如

我将FHSLIB整个库备份下来,再使用RSTLIB复原,假如不更换RSTLIB中的值,那么将

直截了当将FHSLIB整个都覆盖复原;

而假如指定RSTLIB的值为OTHERLIB,那么将么把备

份的FHSLIB的内容,覆盖复原到指定的OTHERLIB库中。

5.将指定的目标备份到SAVF中

SAVOBJOBJ(目标名)LIB(目标所在的库)DEV(*SAVF)SAVF(SAVF所在的库

/SAVF名)

一次能够备份多个目标。

假如是备份源码,那么OBJ就表示源码所在的SRCFILE,MEMBER项确实是源码名。

能够使用F4键,来备份更多的目标,或更多的源码。

6.复原目标

RSTOBJOBJ(*ALL)SAVLIB(目标所在库)DEV(*SAVF)SAVF(SAVF所在库名/SAVF名)

RSTLIB(复原的库名)

与RSTLIB类似。

因此,OBJ选项使用*ALL,表示复原SAVF中备份的所有的目标,

也能够指定只复原单个/多个目标。

8.4菜单--MENU

假如有例子的话,做菜单事实上也不复杂。

我对菜单做得也不多,感受关于一样开发

人员来说,使用频率不是太高,依旧简单说一下吧

随便找一个已存在的菜单,应该是包含DDS与CMD这两种TYPE,COPY一下;

然后用17,或19进入DDS。

用19进入时,能够像编辑报表一样,对菜单进行编辑;

用17进入时,在“Workwithmenuimageandcommands”选项中选择“Y”,然后

用F10能够看到自行定义的每条输入项对应要运行的程序名,修改之;

用17进入后,再退出时,系统会自动提示编译菜单。

成功之后,查看属性为“CMD”的源,会看到里面也有自定义的输入项对应的要

运行程序名。

GO菜单名,就能够进入生成的菜单。

8.5有用命令

WRKACTJOB

那个使用的频率应该是专门高的吧,在那个地点只提一个用法:

Coding的时候断线专门

退出时,再登录之后,用2进入刚才编辑的程序,会报错“正在被使用”。

除了等一会,

一直等到它自动退出之外,还能够用WRKACTJOB+10,来查找刚才自己的那个进程

(显示出来的命令应该是STRSEU),然后把它KILL掉就行了。

DSPFD

DSPFD+PF名,查看文件的信息,包括文件的MEMBER数,总记录数,被删除

的记录数,CCSID等等。

DSPFD+LF名,查看逻辑文件的键值,结合DSPDBR,能够找出一个PF文件对

应的所有LF文件的键值。

DSPFD+库名+*MBRLIST,能够看到该库之下所有的文件名。

那个命令能够使用*OUTFILE,将输出变成一个文件。

关于LF文件,TYPE项选择“*ACCPTH”,能够看到该LF文件的键值。

假如把输

入设定为OUTFILE,那么每条记录指明了一个键值字段。

TYPE项选择“*SELECT”,能够把那个LF文件的选择条件列出来。

灵活运用此命令,将会是专门多自行编写的工具的基础之一。

DSPFFD

注意,和上面的命令相差一个“F”,该命令表示查看PF文件的字段信息。

比如该

PF文件共有多少个字段,每个字段的类型如何。

与DSPFD相似,DSPFFD也能够使用*OUTFILE,将输出变成一个文件。

每条记

录标识一个字段。

同理,灵活运用,也是众多自行编写工具的基础。

MRGSRC

比较两个程序的差异。

按照A、B、A的顺序,MRGSRC时,A程序在上面,B程

序在下面,白色的地点,即表示两个程序的差异。

F13表示同意当前差异,F17表示同意所有差异,F16表示连续查找下一处差异。

在同意差异时,表示按照B程序,更换A程序。

(即B程序不变)

把SPLF变成MEMBER(源文件)

必须明白SPLF名,以及生成SPLF的JOB、USR、NUMBER名

CRTSRCPFFILE(库名/SRCPF)RCDLEN(212)IGCDTA(*YES)

CHGPFFILE(库名/SRCPF)CCSID(935)

CRTPFFILE(库名/PF)RCDLEN(200)IGCDTA(*YES)

CPYSPLFFILE(SPLF名)TOFILE(库名/PF)+

JOB(NUMBER名/USER名/JOB名)SPLNBR(*LAST)

CPYFFROMFILE(库名/PF)TOFILE(库名/SRCPF)+

TOMBR(MBR0001)MBROPT(*ADD)FMTOPT(*CV

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1