RPG AS400程序员培训手册6
AS400培训-RPG
AS/400培训资料于勇IPACS北京在RPGLE中的文件定义_________________________________________________ 3 在RPGLE中有关文件操作的操作码_______________________________________ 5 只输出子文件定义_______________________________________________________ 8 实现输出类型子文件_____________________________________________________ 9 输出类型子文件有定位处理______________________________________________ 12 实现有定位处理输出类型子文件__________________________________________ 13 处理类型子文件有定位处理______________________________________________ 17 实现处理类型子文件有定位处理__________________________________________ 20 处理类型子文件有定位处理和光标处理____________________________________ 26 实现有定位处理、光标处理子文件________________________________________ 29 处理类型子文件有定位、光标、信息子文件处理____________________________ 35 实现有定位、光标、信息子文件的处理类型子文件__________________________ 38 处理类型单页子文件定义________________________________________________ 45 实现处理类型单页子文件________________________________________________ 49 打印文件定义__________________________________________________________ 59 实现打印文件__________________________________________________________ 61在RPGLE中的文件定义**************************************************************** * Copyright 北京宇博电子科技有限公司 1998 * **************************************************************** * * * Program Id - FileDfn * * Program Type - RPGLE * * Purpose - 用于讲解在RPGLE中的文件定义 * * 不可编译 * * Date Generated - 1998-07-22 * * Author - 于勇 * * * *****************************************************************ilename++IPEASFRlen+LKlen+AIDevice+.Keywords+++++++++++++++++++ *..1....+....2....+....3....+....4....+....5....+....6....+. (7)* -------------------------------------------------------------- * 顺序和直接存取只用于输入操作 ( Read , Chain )* -------------------------------------------------------------- FCustomer IF E K DISK* -------------------------------------------------------------- * 仅使用Write来增加记录* -------------------------------------------------------------- FCustomer O E K DISK* -------------------------------------------------------------- * 顺序和直接存取用于输入( Read , Chain ) , Update , Delete* 不包含Write操作* -------------------------------------------------------------- FCustomer UF E K DISK* -------------------------------------------------------------- * 顺序和直接存取用于输入( Read , Chain ) , Update , Delete* 包含Write操作* -------------------------------------------------------------- FCustomer UF A E K DISK* -------------------------------------------------------------- * 显示文件定义说明* -------------------------------------------------------------- FCustomerD CF E Workstn* -------------------------------------------------------------- * 打印文件定义说明* -------------------------------------------------------------- FCustomerP O E Printer在RPGLE中有关文件操作的操作码***************************************************************** Copyright 北京宇博电子科技有限公司 1998 ****************************************************************** ** Program Id - FileOpr ** Program Type - RPGLE ** Purpose - 用于讲解在RPGLE中的文件操作码 ** 不可编译 ** Date Generated - 1998-07-22 ** Author - 于勇 ** ******************************************************************物理文件定义FCustomer UF A E K Disk*显示文件定义FCustomerd CF E Workstn*参照外部文件的数据结构定义D Customer_DsE Ds Extname( Customer )D Dspf_DsE Ds Extname( Customer )D Prefix(XS:2)*关键字列表定义C Csklist KlistC Kfld Csid*读下一条记录*IN90 = *OFF表示读到记录C Read Customerr 99*读上一条记录*IN90 = *OFF表示读到记录C ReadP Customerr 99*最小值定位C *Loval SetLl Customerr*最大值定位C *Hival SetGT Customerr*定位指示符含义C Csklist Setll Customerr 979899* *In97 No Record Found* *In98 Error Occurred* *in99 Exact Match for Search Argument Found*读下一条等于关键字的记录C Csklist Reade Customerr 99*读上一条等于关键字的记录C Readpe Customerr 99*用指定关键字读一条记录并且不锁定读到记录*IN88 = *OFF读到C Csklist Chain(N) Customerr 97*修改记录C Update Customerr*删除记录C Delete Customerr*增加记录C Write CUSTOMERR*记录解锁C UNLOCK CUSTOMERR*条件语句C If Not *In97*赋值语句C EVAL FLD2=FLD1C MOVE FLD1 FLD2C ELSEC MOVE FLD2 FLD1C EndIf*条件选择语句C SELECTC WHEN FLD1=FLD2C OTHERC ENDSL*循环语句C Dow Not *In97C EndDoC Dow Not *In03*显示屏幕并从屏幕中读取内容C ExFmt Dsp01C EndDo*程序结束C Move *ON *InLr只输出子文件定义A*%%TS SD 19980811 141319 YUYONG REL-V3R7M0 5716-PW1 A*%%EC A DSPSIZ(24 80 *DS3) A R SFL01 SFL A*%%TS SD 19980807 103111 YUYONG REL-V3R7M0 5716-PW1 A CSID R O 9 10REFFLD(CUSTOMERR/CSID *LIBL/CUSTOM- A ER) A CSNAME R O 9 23REFFLD(CUSTOMERR/CSNAME *LIBL/CUST- A OMER) A R CTL01 SFLCTL(SFL01) A*%%TS SD 19980811 141319 YUYONG REL-V3R7M0 5716-PW1 A SFLSIZ(0100) A SFLPAG(0010) A CA03(03) A OVERLAY A 30 SFLDSP A 31 SFLDSPCTL A 33 SFLCLR A 34 SFLEND(*MORE) A 1 3'CS0101D' A 1 31'查询用子文件' A DSPATR(HI) A 1 72DATE A EDTCDE(Y) A 2 72TIME A 8 9'客户号' A DSPATR(HI) A 8 31'客户名称' A DSPATR(HI) A R FUN01 A*%%TS SD 19980811 141319 YUYONG REL-V3R7M0 5716-PW1 A 22 3'F3 =退出' A COLOR(BLU)实现输出类型子文件**************************************************************** * Copyright 北京宇博电子科技有限公司 1998 * **************************************************************** * * * Program ID - CS0101R * * Program Type - RPGLE * * Purpose - 建立一个输出类型的子文件 * * Date Generated - 1998-08-06 * * Author - 于勇 * * * **************************************************************** *数据文件定义FCustomer IF E K Disk *显示文件定义FCs0101D CF E WorkStn Sfile( Sfl01 : RecNbr )*子文件用相对记录号定义D RecNbr S 4 0 Inz( *Zero ) *子文件最大记录数D RecLmt S 4 0 Inz( 9999 )*============================* * 主程序 * *============================* *子文件清除C ExSr SflClrSr *子文件记录装入C ExSr SflLodSrC Dow Not *In03 F3*子文件显示C Exsr SflDspSr C EndDo C Move *On *InLr*----------------------------* * 子文件初始化 * *----------------------------*C SflClrSr BegSrC Eval *In30 = *Off SflDspC Eval *In31 = *Off SflCtlDspC Eval *In33 = *On SflClr*写字文件控制记录C Write Ctl01 C Eval *In33 = *Off C Eval *In34 = *Off SflEnd*恢复子文件初值C Reset RecNbr C EndSr*----------------------------* * 子文件数据装入 * *----------------------------* C SflLodSr BegSrC *Loval SetLL CustomerR C Read CustomerR 99 C Dow Not *In99 And C RecNbr <= RecLmt *生成子文件相对记录号C Eval RecNbr = RecNbr + 1 *写子文件记录C Write Sfl01 C Read CustomerR 99 C EndDo *子文件不为空C If RecNbr > *Zero C Move *On *In30 SflDspC Endif *读文件结束C If *In99 C Move *On *In34 SflEndC Endif C EndSr*----------------------------* * 子文件显示 * *----------------------------* C SfldspSr BegSrC Eval *In31 = *On SflCtlDspC Write Fun01 C Exfmt Ctl01 C Eval *In31 = *Off SflCtlDspC EndSr输出类型子文件有定位处理A*%%TS SD 19980811 135301 YUYONG REL-V3R7M0 5716-PW1 A*%%EC A DSPSIZ(24 80 *DS3) A R SFL01 SFL A*%%TS SD 19980807 103529 YUYONG REL-V3R7M0 5716-PW1 A CSID R O 9 10REFFLD(CUSTOMERR/CSID *LIBL/CUSTOM- A ER) A CSNAME R O 9 23REFFLD(CUSTOMERR/CSNAME *LIBL/CUST- A OMER) A R CTL01 SFLCTL(SFL01) A*%%TS SD 19980811 135301 YUYONG REL-V3R7M0 5716-PW1 A SFLSIZ(0100) A SFLPAG(0010) A CA03(03) A OVERLAY A 30 SFLDSP A 31 SFLDSPCTL A 33 SFLCLR A 34 SFLEND(*MORE) A RECRRN 4S 0H SFLRCDNBR A 1 3'CS0102D' A 1 31'有定位子文件' A 1 72DATE A EDTCDE(Y) A 2 72TIME A 4 60'客户号定位:' A POSCSID 5A I 4 75 A 8 9'客户号' A 8 32'客户名称' A R FUN01 A*%%TS SD 19980805 161157 YUYONG REL-V3R7M0 5716-PW1 A 22 3'F3 =退出'实现有定位处理输出类型子文件**************************************************************** * Copyright 北京宇博电子科技有限公司 1998 * **************************************************************** * * * Program ID - CS0102R * * Program Type - RPGLE * * Purpose - 建立一个输出类型的子文件 * * 有定位 * * Date Generated - 1998-08-06 * * Author - 于勇 * * * **************************************************************** *数据文件定义FCustomer UF E K Disk *显示文件定义FCs0102D CF E WorkStn Sfile( Sfl01 : RecNbr )D CsKeyAry S 5 Dim( 9999 ) D Ascend *数组下标定义D X S 4 0 Inz( 1 )D CsKeyDs DS D Csid 5D PosDs DS D PosCsid 5 Inz( *Blank )*子文件用相对记录号定义D RecNbr S 4 0 Inz( *Zero ) D LstRecNbr S 4 0 Inz( *Zero )*子文件最大记录数D RecLmt S 4 0 Inz( 9999 )*============================* * 主程序 * *============================**子文件清除*子文件记录装入C ExSr SflLodSrC Dow Not *In03 *子文件定位C Exsr SflPosSr*子文件显示C Exsr SflDspSr C EndDoC Move *On *InLr *----------------------------* * 子文件初始化 * *----------------------------* C SflClrSr BegSrC Eval *In30 = *Off SflDspC Eval *In31 = *Off SflCtlDspC Eval *In33 = *On SflClr*写字文件控制记录C Write Ctl01 C Eval *In33 = *Off SflClr*恢复子文件初值C Reset RecNbrC EndSr *----------------------------- * 子文件数据装入 * *----------------------------- C SflLodSr BegSrC *Loval SetLL CustomerR C Read CustomerR 99 C Dow Not *In99 And C RecNbr <= RecLmt *生成子文件相对记录号C Eval RecNbr = RecNbr + 1 *将关键字赋值给数组C Eval CsKeyAry( RecNbr ) = CsKeyDs *写子文件记录C Write Sfl01C EndDo*子文件不为空C If RecNbr > *Zero C Eval LstRecNbr = RecNbr C Move *On *In30 C Endif*读文件结束C If *In99 C Move *On *In34 C EndifC EndSr *----------------------------* * 子文件定位 * *----------------------------* C SflPosSr BegSrC If PosDs <> *BlankC ReSet X C PosDS LookUP CsKeyAry( X ) 97 99 C If *In97 Or *in99 C Eval RecRrn = X C Else C Eval RecRrn = LstRecNbr C EndIfC Else C Eval RecRrn = 1 C EndIfC EndSr *----------------------------* * 子文件显示 * *----------------------------* C SfldspSr BegSrC Eval *In31 = *On C Write Fun01 C Exfmt Ctl01 C Eval *In31 = *OffC EndSr处理类型子文件有定位处理A*%%TS SD 19980811 141059 YUYONG REL-V3R7M0 5716-PW1 A*%%EC A DSPSIZ(24 80 *DS3) A R SFL01 SFL A*%%TS SD 19980811 135222 YUYONG REL-V3R7M0 5716-PW1 A SCADDRESS 30A H A OPT 1Y 0B 9 5EDTCDE(2) A SCCSID R O 9 10REFFLD(CUSTOMERR/CSID *LIBL/CUSTOM- A ER) A SCCSNAME R O 9 23REFFLD(CUSTOMERR/CSNAME *LIBL/CUST- A OMER) A R CTL01 SFLCTL(SFL01) A*%%TS SD 19980811 141059 YUYONG REL-V3R7M0 5716-PW1 A SFLSIZ(0100) A SFLPAG(0010) A CA03(03) A CA06(06) A OVERLAY A 30 SFLDSP A 31 SFLDSPCTL A 33 SFLCLR A 34 SFLEND(*MORE) A RECRRN 4S 0H SFLRCDNBR(CURSOR) A 1 3'CS0103D' A 1 29'有选项处理定位子文件' A DSPATR(HI) A 1 72DATE A EDTCDE(Y) A 2 72TIME A 4 2'请键入选项,按执行键继续。
AS400_初级培训
一.AS/400简介 (3)二.开发环境和开发工具介绍 (4)1.AS/400环境简介 (4)1.1三级存储结构 (4)1.2 如何建立库、文件和成员 (7)2、ILE简介 (8)3、AS/400开发工具介绍 (9)三.DDS介绍和实例说明 (10)1、AS/400的DDS常用类型介绍 (11)2、AS/400物理文件和逻辑文件介绍 (11)3、AS/400如何使用DDS来创建物理文件和逻辑文件 (11)4、AS/400如何使用DDS来创建显示文件 (16)四.RPG介绍和实例说明 (20)1、RPG的基本结构介绍 (20)2、F段介绍 (21)3、D段介绍 (23)3.1 单独变量的定义 (23)3.2 结构变量的定义 (24)3.3 常量的定义 (24)3.3 数组的定义 (24)4、C段介绍 (25)4.1 概念 (25)4.2 程序入口的定义 (27)4.3 程序的结束 (27)4.4 变量的赋值 (27)4.5 子过程的定义 (28)a)概述 (28)b)子过程的建立 (28)c)子过程的调用 (29)4.6 程序过程控制(判断、循环) (30)a) 判断 (30)b) 多重判断 (30)c) 循环 (30)4.7 数据文件的操作 (31)a) 文件相关操作 (31)b) 记录定位相关操作(游标) (31)c) 记录更新相关操作 (33)5、一个程序的实例及分析 (34)6、在RPG中嵌入SQL (48)五.CL程序的开发介绍 (48)1、CL 命令的介绍 (48)2、CL 程序 (49)3、CL 程序实例 (50)六.程序间的互相调用 (53)1、RPGIV之间的调用 (53)2、CLP与RPG之间的调用 (55)AS/400 初级培训讲义目的:希望通过短期培训,让有编程基础的技术人员,了解AS/400的一些基本概念和操作方式。
了解AS/400的代码编辑方式和基本概念一. AS/400简介AS/400是IBM于1988年推出的一种商用小型机,它是在 IBM System/32,System/34,System/36,System/38这个系列的基础上发展而来的。
AS400 操作指南
AS/400 系统操作员指南广州通亿计算机科技有限公司2002年第二版目标了解 AS/400 基本结构 ---- ---- 硬件及操作系统组成掌握 AS/400 操作方法 ---- ---- 命令,菜单及在线帮助掌握 AS/400 基本维护方法1,了解 AS/400 故障类型2,掌握 SST 使用方法,检查系统状态3,会查找手册,了解问题性质4,了解手动开机步骤,并会操作目录第一章, AS/400 系统概述第二章, AS/400 基本操作第三章,手动开机介绍第四章, AS/400 故障分析介绍第五章,常有参考手册说明第一章 AS/400 系统概述一,IBM i系列简介未来发展Domino 专用处理器性能Domino 专用处理器工作范围二,基本概念完整的系统,集成了关系型数据库和网络功能等特性。
特点:1,易于使用2,系统无缝的成长和提高3,针对商业环境而做的侧重于输入--输出方面的优化设计系统层次化架构:图1 - AS/400 系统体系结构MI(机器接口)的功能:图2 – MI 功能面向对象的技术:提高系统和其数据的整体完整性用户无须考虑对象所要占用的空间,系统会自动分配提高系统的灵活性,代码再使用,编程的效率和降低出错率单层次的存储概念微处理器的簇形结构SOIO n-chip Copper-wiring 技术热插拔第二章 AS/400 基本操作一,面板操作二,系统启动和停止三,处理及报告系统问题四,常用系统维护方法及命令说明OS/400 命令组成方法缩写惯例:WRK DSP CHGDEV TAP CMN PRT DSK SYS PWR LOG CMD STS CFGMSG MSGQ OUTQ PRB QHST例如:WRKOUTQDSPMSGWRKSYSSTSDSPLOGOS/400 命令中常用的功能键F1 帮助及说明 ( 针对光标所在位置)F4 列出可能选项 ( 或称:参数),针对光标所在位置F5 刷新F10 显示附加选项PGDN 向下翻页PGUP 向上翻业用户及权限:QSYSOPR --------- 系统定义QSRV --------- 系统定义,为系统维护使用QSECOFR --------- 系统定义,为系统中最高权限重点介绍:1, WRKSYSSTS2, STRSST3,全系统备份4,清洗磁带机方法5,常有维护命令命令说明GO *ALL 出所有系统命令的菜单GO cmddsk 到硬盘命令菜单GO cmdhdw 到硬件命令菜单GO cmdpwr 到电源命令菜单GO cmdsys 到系统命令菜单GO SAVE 到备份菜单GO RESTORE 到恢复菜单GO main 到主菜单anzprb 分析一个新问题chgmsgq qsysopr *break 改变系统操作员信息为中断方式dltprb 删除问题日志中超过30天的记录dspjob 显示一个作业DSPJOBLOG 显示作业日志dsplog qhst 显示历史日志dspsysval 显示系统值endsbs 结束子系统inztap 格式化磁带pwrdwnsys *immed 关系统电源savsys 保存系统signoff 退出用户STRSST 启动系统维护工具vfycmn 显示通讯确认屏幕vfyprt 确认打印机是否正常vfytap 确认磁带机或光盘机状态vfycfg 确认配置 ( 如设备,I/O 处理器或通讯线是开还是关断 ) WRKCFGSTS 显示所有 I/O 处理器的状态wrkdevd 处理所有设备描述wrkoutq 处理输出队列wrkprb 显示问题日志wrkhdwprd 显示硬件产品wrkhdwrsc 显示资源名WRKSYSSTS 显示系统状态第三章手动开机介绍1,系统面板上选择手动方式2,如果系统还没有上电,按面板上的电源开关3,开主控台4,一切正常后,主控台会显示如下画面:IPL or Install the SystemSelect one of the following1. Perform an IPL2. Install the operating system3. Use Dedicated Service Tools ( DST )4. Perform automatic installation of the operating systemSelection__5,键入 “ 1 ,按执行键”6,系统会出现如下画面,需要人为介入:A,Display Messages按 F12 键B, Sign On以 QSECOFR 注册C, Select Products to Work with PTFs按 F12 键D, IPL Options输入系统日期和系统时间E, Display Messages按 F12 键7,出现主菜单后,若要恢复常规状态,采取以下步骤:A,在系统面板上,将手动改为常规方式B,键入命令:pwrdwnsys *immed restart(*yes)第四章 AS/400 故障分析介绍一,故障分析包括:1,故障的确定确定是软件还是硬件故障2,故障的隔离找出故障的原因二,正确的故障分析,需注意以下几点:1,准确的描述故障及其表现特征2,确认它是否为一个新问题还是已发生过3,通过以上步骤,确定所须的正确的信息4,收集信息5,确定要解决故障须联络的人三,通常须收集的信息:1,QHST 中相关时间段的打印输出2,错误日志 ( ERROR LOG )STRSST3,系统硬件配置WRKHDWPRD4,相关时间段的 QSYSOPR 的信息DSPMSG QSYSOPR5,问题发生的日期和时间四,系统故障的外部表征:stops --------- 死机1,Hard2, Incorrect optput --------- 不正确的输出3,Job--------- 作业循环loops--------- 作业等待waits4,Jobloop--------- 系统循环5,Systems6, Systems wait -------- 系统等待7,Messages--------- 信息8,OSproblem --------- 操作系统问题9, VLIC problem --------- 微码问题10,Communication problem --------- 通讯问题11,IPLproblems --------- IPL问题--------- 工作站死锁12,Woekstationlocksstops --------- 死机1,Hard* 系统注意( Attention ) 黄灯亮,并有代码显示在面板上* 工作站键盘不能输入* DST 画面出不来,功能选择项 21 不工作--------- 不正确的输出optput2,Incorrect* 系统继续运行,作业正常结束,但后来发现输出不对* 问题通常可再现* 一些不该发生的事发生了* 一些该发生的事没有发生3,Messages --------- 信息* job log ( 作业日志 )* qsysopr 的 MSGQ ( 信息队列 )* qhst ( 历史记录 )4,Hang --------- 挂起* 系统挂起”特征象 “ 死机,但没有代码显示* 作业挂起WRKACTJOB,作业没有消耗任何系统资源5,Loops --------- 循环* 系统循环> 处理器活动率灯显示 100%> 所有工作都停下来* 作业循环> 处理器活动率灯显示 100%> 系统性能下降> 作业没有在预期的时间内结束> 其他作业继续运行,但速度显得非常慢6,Communicationproblem --------- 通讯问题* 线路( LINE ),控制器( CTL )或设备( DEV ) 不正常problem --------- 性能问题7,Performance* 有关性能的系统命令> WRKSYSSTS> WRKDSKSTS> WRKACTJOB8,Workstationlocks --------- 工作站死锁* 15 次以上在同一台设备以同样的用户帐号注册失败第五章常有参考手册说明《 9406 270 Problem Analysis 》《 AS/400 Service Fuction 》。
AS400如何编写RPG程序
AS400如何编写RPG程序As400如何编写RPG程序1. 写给刚接触AS/400的朋友 --- 如何建立库、文件和成员鉴于很多朋友都还是刚接触AS/400,我就从系统登陆开始简单说说吧~打开AS/400仿真终端(可以是PCOM、CA等软件,如何配置就不说了),输入用户名和密码,进入系统。
如果你的权限足够的话,可以使用CRTLIB命令给自己建个库,如:CRTLIB LIB(MYLIB) TYPE(*TEST) TEXT('for test') 库建好之后,你可以使用STRPDM->2,在Library处输入库名MYLIB,按确认键就进入该库。
这时库下面没任何文件,你可以使用CRTSRCPF命令建立一个源物理文件,用来放置源码,如: CRTSRCPF FILE(MYLIB/MYSRCPF) IGCDTA(*YES) TEXT('源物理文件') 【注:】参数IGCDTA(*YES)表示该源物理文件里头的源码文件都可以使用中文到此为止,自己存放源码的地方已经生成,你可以直接使用以下命令直接进入该源物理文件: WRKMBRPDM FILE(MYLIB/MYSRCPF)进入该文件之后,就可以建立任何源码文件了,按F6,显示“Start Source Entry Utility(STRSEU)”画面,参数说明如下:1. Source member:表示建立的成员名,我们把它理解成存放源码的文件就可以,类似WINDOW平台的TXT文件;2. Source type:表示建立的成员名的类型,如果不确定,可按 F4 查看,常用类型有(1)PF: 物理文件;(2)LF: 逻辑文件;(3)RPG: RPG程序源码文件;(4)RPGLE: RPGLE程序源码文件;(5)DSPF: 显示文件;(6)CLP: CLP程序源码文件;(7)CMD: 命令文件……3. Text 'description':表示对该文件的描述,可填可不填。
AS400 CL 编程手册
第五章在CL过程和程序中处理目标5.1 在CL程序中访问目标在CL程序命令和过程中引用目标的原则与在每个命令和分别处理不是在程序中使用目标的原则是一样的。
目标名可用限定或非限定名,非限定目标名用库列表来查找。
在CL过程和程序中引用的大多数目标在运行引用它们时才访问。
对限定名(库名/目标名)的目标,在命令运行引用它时必须在指定的库中,但在程序生成时不一定要在此库中,即CL语句中用的大部分目标是简单地基于运行时目标的位置。
在5.1.1中给出一些特例。
如果在CL源语句中不用限定名而用库列表,就不用对所有目标做运行时的考虑。
如果在编译时用库列表,那么在运行时目标可以在库列表中的任一库里,这就要求在不同库中不能有重复的目标名。
如果用库列表,可以在过程生成和命令处理之间把目标移到不同的库中。
在命令运行时所引用的目标必须存在,而在编译时程序PAYROLL即时不存在,CL程序也能编译成功:PGM /*TEST*/DCL...MONMSG......CALL PGM(QGPL/PAYROLL)...ENDPGM实际上,在程序TEST活动时,PAYROLL不一定存在,但在处理CALL命令时要存在。
在调用程序中被调用程序的生成一定要放在CALL命令之前:PGM /*TEST*/DCL......MONMSG...CRTCLPGM PGM(QGPL/PAYROLL)CALL PGM(QGPL/PAYROLL)...ENDPGM对于生成命令,比如CRTCLPGM、CRTDTAARA,在编译和运行时所引用的目标是生成命令定义的,而不是生成的目标。
如果用生成命令,生成命令定义在编译时必须在限定命令所用的库中。
(换句话说,如果用*LIBL,它必须在库列表中)。
5.1.1 例外情况:访问命令定义、文件和过程从引用命令定义或文件的源语句生成CL程序时要下面两个东西存在:在文件生成时目标必须存在在命令引用它们做处理时目标必须存在即在用DCLF时,在生成引用此文件的程序时必须先生成文件。
AS400程序员培训手册(中级)
1 简单说明 (3)2 程序代码行的编写 (3)2.1 最简单的RPGLE程序 (3)2.2 举例准备 (3)2.3 简单的程序流程 (4)2.4 常见的程序流程 (5)2.5 F行说明 (5)2.5.1 内容说明 (5)2.5.2 常用例子 (9)2.5.3 补充说明 (10)2.6 D行说明 (10)2.6.1 内容说明 (10)2.6.2 常用例子 (13)2.6.3 补充说明 (14)2.7 入口参数 (14)2.8 C行说明 (16)2.8.1 写在前面 (16)2.8.2 内容说明 (17)2.8.3 ILE操作码分类: (18)2.8.4 ILE操作码 (19)2.8.4.1 A--C (19)2.8.4.2 D--E (27)2.8.4.3 F--N (32)2.8.4.4 O--R (39)2.8.4.5 S--Z (43)3 和程序相关的数据库知识 (49)3.1 LF(逻辑文件) (49)3.1.1 逻辑文件概念 (49)3.1.2 逻辑文件对效率的影响 (51)3.2 MEMBER (51)3.3 游标 (52)3.3.1 游标的概念 (52)3.3.2 不同操作码对应的游标的处理 (52)3.3.3 “有且仅有”的游标 (53)3.3.4 LOV AL、HIV AL对应的游标操作 (53)3.4 事务处理 -- COMMIT (54)3.4.1 概念描述 (54)3.4.2 使用方法 (54)3.4.3 注意事项 (55)3.5 关于锁表的问题 LCKW (56)4 DEBUG调试以及常见出错信息 (56)4.1 写在前面 (56)4.2 常规用法 (57)4.2.1 程序编译 (57)4.2.2 执行DEBUG命令 (57)4.2.3 运行程序 (57)4.2.4 在DEBUG模式中进行调试 (58)4.2.5 跟踪被当前程序调用的程序 (58)4.2.6 一定要退出DEBUG模式 (59)4.2.7 补充 (59)4.3 跟踪批处理程序( From qingzhou) (60)4.4 常见的出错信息 (60)4.4.1 编译程序时的出错信息 (60)4.4.2 运行时的出错信息 (62)5 CL、CMD (62)5.1 CL程序 (62)5.1.1 基本认识 (62)5.1.2 CL程序的常用语法及命令: (63)5.1.3 不常用的语法 (65)5.2 CMD (66)6 屏幕文件及使用(整理中) (67)7 其它 (72)7.1 报表打印 (72)7.2 SA VF,备份与恢复 (77)7.3 菜单--MENU (78)7.4 几个命令 (78)7.5 关于代码风格的几点想法 (81)1简单说明内部交流、或可作培训使用。
RPG AS400程序员培训手册
2.8.4.4 O--RON-ERROR (On-Error)没用过OPEN {(E)} (Open File for Processing) 打开文件Factory 1 Operation Factory 2 Result HI LO EQOPEN 文件名OPEN 后面的目标,必须是在当前程序中已声明的文件名(不是文件的记录格式名),而且在OPEN 操作之后,在程序结束之前之前,必须有对应的CLOSE 操作。
使用OPEN 操作,文件在声明时,必须使用USROPN 关键字(详见D 行说明)。
ORxx (Or) 逻辑判断—或Factory 1 Operation Factory 2 Result HI LO EQFLD01 IFGT FLD03FLD01 OREQ FLD02等价于IF FLD01>FLD03 OR FLD01=FLD02与IF、IFxx,AND、ANDxx 类似,RPGLE 的写法OR,比RPG 的写法ORxx 要灵活,而且可以用来表达一些复杂的逻辑关系。
有鉴于此,所以通常IF 语句中,我会以OR 为主,基本不用ORxx。
如果在编程序方面,公司/项目组无硬性要求,那我觉得还是少用ORxx 吧,总觉得这种写法的逻辑关系看起来不直接,尤其是有很复杂的AND,OR 时。
OTHER (Otherwise Select) 分支语句的判断与分支语句SELECT 一起使用,表示不符合上述所有条件时的操作,如下:Factory 1 Operation Factory 2 Result HI LO EQSELECTWHEN 条件判断1处理语句1WHEN 条件判断2处理语句2OTHER处理语句3ENDSL在这个例子中,当满足条件判断1 时,运行处理语句1,运行结束后跳至ENDSL 处;如果不满足条件判断1,则程序继续向下执行,判断是否满足条件判断2。
当满足条件判断2 时,运行处理语句2,跳至ENDSL;当不满足当不满足条件判断2 时,程序继续向下执下,当读到OTHER 操作码时,无条件运行处理语句3(即当程序当前不满足以上所以条件判断时,则执行OTHER 之后的语句。
AS400程序员培训手册(中级)
4.2
5
6 7Biblioteka 常规用法 .................................................................................................................57 4.2.1 程序编译 .........................................................................................................57 4.2.2 执行DEBUG命令 ...........................................................................................57 4.2.3 运行程序 .........................................................................................................57 4.2.4 在DEBUG模式中进行调试 ...........................................................................58 4.2.5 跟踪被当前程序调用的程序 .........................................................................58 4.2.6 一定要退出DEBUG模式 ...............................................................................59 4.2.7 补充 .................................................................................................................59 4.3 跟踪批处理程序( From qingzhou).........................................................................60 4.4 常见的出错信息 .....................................................................................................60 4.4.1 编译程序时的出错信息 .................................................................................60 4.4.2 运行时的出错信息 .........................................................................................62 CL、CMD ..............................................................................................................................62 5.1 CL程序....................................................................................................................62 5.1.1 基本认识 .........................................................................................................62 5.1.2 CL程序的常用语法及命令: ........................................................................63 5.1.3 不常用的语法 .................................................................................................65 5.2 CMD .......................................................................................................................66 屏幕文件及使用(整理中) .................................................................................................67 其它.........................................................................................................................................72 7.1 报表打印 .................................................................................................................72 7.2 SAVF,备份与恢复 ...............................................................................................77 7.3 菜单--MENU ..........................................................................................................78 7.4 几个命令 .................................................................................................................78 7.5 关于代码风格的几点想法 .....................................................................................81
AS400培训资料(下)
AS400培训资料(下)AS400应用开发培训高级应用与交易实现前言本阶段的培训,在上一级培训的基础上,讲解业务系统的处理以及交易的实现。
目的是使大家掌握如何在AS400上实现具体的交易,完成本次开发任务。
在讲解业务系统的例子程序和会计记帐核心的过程中我们将穿插讲解AS400中一些编程方式和一些简单工具的使用。
由于篇幅和时间的关系在本教材中对一些简单工具不作具体的介绍,请大家作好记录。
同时为了配合本次培训,我们将下发两本教材,一本是操作码手册,另外一本是本公司原来出的IBM AS400 培训教材第二分册,对这两本教材的内容我们可能不作具体的讲解,主要是给大家在学有余力的情况下进行自学,以及今后进行实际编码时的参考手册。
对于一些非常少见的应用,我们不作讲解,请大家参考下发的教材或使用联机的帮助。
使用F6或其他方式建立的成员在Opt选14编译物理文件参与编译其他类型的目标(Object) SLRRPG(可执行程序 *PGM) 物理文件,逻辑文件,打印文件等参与编译,若RPG程序的F表进行了相应的定义其他需要参与编译的目标第一章 RPG程序使用RLU的方法在上一期的培训中我们简要的介绍了RLU的一些用法,现在我们来学习RLU的一些应用,以及如何在RPG程序中使用RLU生成的打印文件在今后的设计过程中,应业务人员的要求,在报表中对于一些域的属性可能要进行修改。
以下是将光标移到域后出现的域属性内容Work with Field KeywordsField . . . . . . . . : ' 客户 ... Record format . . . . : HEADType options, press Enter.2=Specify 4=RemoveOpt Keyword Opt Keyword Opt KeywordALIAS EDTCDE MSGCONBARCODE EDTWRD PAGNBRBLKFOLD FLTFIXDEC PRTQLTYCDEFNT FLTPCN REFFLDCHRID FNTCHRSET SKIPACHRSIZ FONT SKIPBCOLOR HIGHLIGHT SPACEACPI IGCALTTYP > SPACEBCVTDTA IGCANKCNV TEXTDATE IGCCDEFNT TIME> DFT IGCCHRRTT TRNSPYDLTEDT INDTXT UNDERLINEBottomF3=Exit F5=Refresh F9=Input keyword parameters F10=Specify informationF12=Cancel F16=Remove all keywords选择(opt)2 进行该项的内容说明 4 是取消该项说明在这些选项中经常用到的是:DFT 若前面有”>”则说明该项是常量域,否则是变量域。
IBM AS400培训教程和手册
12
磁带组使用者的名字,这一项一般不用进行修改 Check tape for active files . . . . . . . Y Y=Yes, N=No 这一项与格式化一盘磁带的意义相同,一般使用N,也就是NO的意 思,表示不进行检查
13
第五章 磁带什么时候该丢弃
每盘磁带都有一定的使用寿命,AS/400系统提供了一个磁带文卷寿 命统计的监督程序,通过该程序可以确定某盘磁带是否已到使用寿 命需要更换新磁带。 操作步骤: 1、在命令行输入STRSST命令,进入System Service Tools菜单 2、选择1(Start a Service Tool) 3、在Start a Service Tool 3 Start Tool菜单上选择1(Product activity log ) 1 Product 4、在Product activity log 菜单上选择4(Work with tape/diskette lifetime Statistes) 5、在Select Media Option屏幕上在Removable media参数选择相 应的介质类型
20
第八章 提交作业
(1)在主菜单(Main)中选择3(General system tasks) (2)在General system tasks菜单中选择1(Jobs) (3)在Jobs菜单上键入选项7(Submit a job) (4)按执行键(Enter)出现Submit a job命令提示屏幕,或者键 入命令SBMJOB,并按F4键。 (5)在Command to run 5 Command run输入字段内键入在批作业中你要运行的命 令。如果该作业是一个CL程序,则要键入程序名,如CALL PAYROLL。 (6)如果需要可修改其它字段的缺省值,也可以不修改。
as400常用操作
as400常⽤操作AS400常⽤操作⼿册1、关于表的操作1.1、数据库表的拷贝wrkobj: 输⼊要查找的⽬标、库,执⾏。
(wrkobj obj(gjjtemp/czyb) 在⽬标窗⼝输⼊3,执⾏,修改要拷贝到的⽬标库,同时Duplicate data 选YES,执⾏。
然后使⽤grtobjaut进⾏赋权。
Grtobjant 执⾏,输⼊object、lib、object type(all)、users(要赋权者)、authority(*all)。
Grtobjaut obj(gjgrdta/czfzb) objtype(*all) user(gjgr) aut(*all)注意:如⽬标在要拷贝到的库中存在,则不能覆盖,必须先删除。
1.2、如何在400上修改某条记录UPDDTA: 输⼊逻辑⽂件名,则可以按照逻辑⽂件键字检索记录,然后修改。
如输⼊物理⽂件名,则检索出所有记录,不能定位到某条记录,只能⼀条⼀条翻阅到要修改记录,然后修改,此时如果记录很多,太不⽅便。
1.3、为表添加⽇志STRJRNPF FILE(GJDWDTA/LBJQCB)JRN(GJDWDTA/GJJJRN) IMAGES(*BOTH)1.4、去掉表的⽇志(ENDJRNPF)Journaled physical file . . . . > *ALL Name, *ALLLibrary . . . . . . . . . . . Name, *LIBL, *CURLIB+ for more valuesJournal . . . . . . . . . . . . > GJJJRN Name, *FILELibrary . . . . . . . . . . . > GJGRDTA Name, *LIBL, *CURLIB 1.5、清空表数据CLRPFMclrpfm GJDWDTA/ltqsjb1.6、如何在两台服务器之间传递数据例如将810机器上的gjgrdta库中sbgqcb中的数据传送到270机器上的gjdwdta库中的sbgqcb中:在810机器上执⾏如下操作:1)CHGDDMF-> F4:DDM FILE 项填写:TESTDDMLIBRARY填写:QGPLRemote file:File 处填写SBGQCBLibrary填写GJDWDTA执⾏2)CPYF->F4:From file 处填写SBGQCBLibrary处填写GJGRDTATo file 处填写TESTDDMLibrary 处填写QGPLReplace or add records 处填写*ADD执⾏。
AS400基本操作
【新客网AS400教程】CL基本命令系统操作常使用的指令(AS/400 指令均是从英文单字取 3 个字, 如 Work with Active Job ==> WRKACTJOB)1. WRKACTJOB(整个系统)WRKJOB(单一工作)检示系统目前的使用状态有那些 Jobs 正在运行 , CPU 使用情形及更改Jobs 属性(运行等级先后次序), 回操作或程序错误讯息, 检示单一Job 的运行状态,亦可终止 JOB运行(End Job).2. WRKWTRSTRPRTWTRENDWTR打印机治理 (Wrok with Writer)打印机激活 (Start Printer Writer)打印机终止 (End Writer)3. WRKSYSSTS(Work with System Status)检示系统资源 RAM 目前的使用状态.可动态调整资源的分配以取得系统运行最佳化.4. WRKSPLF(Work with Spooled File)报表指定打印印表机, 储存, 删除.5. WRKJOBSCDE(Work with Job Schedule Entery)设定工作排程时间6. Go Power设定开关机时间7. SAVLIB (Save Library)SAVOBJ(Save Object)储存程序馆 --> RSTLIB : 回复程序馆储存对象 --> RSTOBJ : 回复对象8. WRKCFGSTS *LIN(线路)(Work with Configuration Status)WRKCFGSTS *CTL(控制器)WRKCFGSTS *DEV(工作站)检示及治理激活或终止通信线路使用情形 , 且会自动带出远程控制器及工作站使用情形.Status 状态Vary on pending 等待联机Varied On 已联机系统处理中Active 正常作业中Varied Off 切断联机 , 此时无法联机 , 需要将线路(Line),控制器(Controller),工作站(Device)设定至 Vary on pending 才可以联机.在将显示(Display)工作站 Varied Off 前 , 先从画面检视该工作站是否仍有残存 Job 挂在该工作站 , 若有则需将 Job 强迫结束 (ENDJOB) ,否则无法将工作站 (Device) 及及控制器 (Controller) Varied Off. 显示(Display)工作站在被 Varied on 后 , 状态会由 Varied off --> Vary on pending , 此时若该显示(Display)工作站有开机, 状态会由 Vary on pending --> Signondisplay, 若 User 输入 ID 及 Password , 系统会以该显示(Display)工作站名称产生 Job, 状态会由 Signondisplay--> Active.在将印表机(Printer)工作站 Varied Off 前 , 先从画面检视该工作站是否仍有 Writer 挂在该工作站 , 若有则需将 Writer 强迫结束(ENDWTR) ,否则无法将工作站 (Device) 及控制器 (Controller) Varied Off.印表机(Printer)工作站被 Varied on 后 , 状态会由 Varied off --> Vary on pending ,此时若该印表机(Printer)工作站有开机, 状态会由 Vary on pending --> Varied On , 待激活印表机(STRPRTWTR)后 ,系统会以该印表机(Printer)工作站名称于 QSPL 子系统下产生印表机(Printer)工作站 Job , 状态会由 Varied on --> Active.9. STRPDM激活 AS/400 程序开发工具WRKLIBPDM 针对整个链接库所有对象WRKOBJPDM 针对链接库之单一对象WRKMBRPDM 针对档案数据成员以上功能均可对对象(档案)作建立, 复制, 搬移, 删除10. CPYF(Copy File)拷贝档案数据成员, 可新增或取代记录11. WRKMSGQ (*QSYSOPR)(Work with Message Queue)检示及回复系统讯息12. INZTAP(Initialize Tape)DSPTAP(Display Tape)格式化磁带显示磁带内容13. WRKSBMJOB(Work with Submitted Job)检示批次作业状态14. WRKOUTQ(Work With Out Queue)检示报表暂存区 , 报表暂存区须要指定至印表机 , 并激活该印表机(STRPRTWTR)才可印表 . 每台打印机均有一对应之报表暂存区.15. WRKJOBQ(Work With Job Queue)检示待执行之批次工作暂存区 , 在暂存区排队之工作须要等待系统分配何时执行 , 采先进先出16. WRKOBJLCK(Work with Object Lock)检示对象有无被其它作业使用或对象被何作业锁住, 将之排除17. CALL执行程序18. SNDBRKMSG(Send Break Message)送出立即讯息(此命令会中断使用者操作画面盖住 , 并将讯息显示在画面)18. CHGJOB(Chang Job)更改工作属性, 如运行等级(Running Priority)19. DSPLOG (Display Log)检示系统历史数据记录20. CRTSRCPF(Create Source Physical File)建立存放程序(QCLSRC,QRPGSRC,QCBLSRC), 画面及报表格式(QDDSSRC) , 数据库格式定义(QDDSSRC)之 Source 档案21. CRTPF(Create Physical File)使用数据库格式定义(QDDSSRC)之 Source member 建立数据库22. STRDFU激活维护数据库工具, 可新增 ,修改 ,查询 ,删除单笔数据23. STRSDA (Start Screen Design Aid)激活编修画面格式工具并产生画面 Source24. STRSQL激活数据浏览查询工具 ,可一次新增 ,修改 ,查询 ,删除多笔数据25. STRRLU(Start Report Layout Utility)激活报表格式产生工具26. STRSEU(Start Source Entry Utility)激活 Source 编辑工具27. CRTDSPF(Create Display File)使用画面格式(QDDSSRC) ,建立画面供程序使用28. CRTPRTF(Create Printer File)使用报表格式(QDDSSRC) ,建立报表档供程序使用28. CRTCLPGM(Create CL Program)使用程序源文件(QCLSRC)内成员,建立 CL(Control Language) 应用程序29. CRTRPGPGM(Create RPG Program)使用程序源文件(QRPGSRC)内成员,建立 RPG 应用程序30. CRTCBLPGM(Create Cobol Program)使用程序源文件(QCBLSRC)内成员,建立 COBOL 应用程序31. GO LICPGM安装或查询系统及系统应用程序32. DSPPTF查询系统目前已上那些 PTF , (PTF 如同 PC 之 Service Pak)33. DSPMSG QSYSOPR检视系统是否有不正常讯息或响应讯息系统治理 : 要检示系统目前有那些硬件资源 , 执行 WRKHDWSRC(Work with Hardware Resource) 或 WRKHDWPRD (Work with Hardware Product) 可列出系统目前的硬件资源.如硬盘 , 通讯适配卡 , Local 控制器....等.。
IBM_AS400_RPG学习手册
IBM_AS400_RPG学习手册1 简单说明 (3)2 程序代码行的编写 (3)2.1 最简单的RPGLE程序 (3)2.2 举例准备 (3)2.3 简单的程序流程 (4)2.4 常见的程序流程 (5)2.5 F行说明 (5)2.5.1 内容说明 (5)2.5.2 常用例子 (9)2.5.3 补充说明 (10)2.6 D行说明 (10)2.6.1 内容说明 (10)2.6.2 常用例子 (13)2.6.3 补充说明 (14)2.7 入口参数 (14)2.8 C行说明 (16)2.8.1 写在前面 (16)2.8.2 内容说明 (17)2.8.3 ILE操作码分类: (18)2.8.4 ILE操作码 (19)2.8.4.1 A--C (19)2.8.4.2 D--E (27)2.8.4.3 F--N (32)2.8.4.4 O--R (39)2.8.4.5 S--Z (43)3 和程序相关的数据库知识 (49)3.1 LF(逻辑文件) (49)3.1.1 逻辑文件概念 (49)3.1.2 有关编译的问题 ..................................................... 错误!未定义书签。
3.1.3 逻辑文件对效率的影响 (51)3.2 MEMBER (51)3.3 游标 (52)3.3.1 游标的概念 (52)3.3.2 不同操作码对应的游标的处理 (52)3.3.3 “有且仅有”的游标 (53)3.3.4 LOV AL、HIV AL对应的游标操作 (53)3.4 事务处理-- COMMIT (54)3.4.1 概念描述 (54)3.4.2 使用方法 (54)3.4.3 注意事项 (55)3.5 关于锁表的问题LCKW (56)4 DEBUG调试以及常见出错信息 (56)4.1 写在前面 (56)4.2 常规用法 (57)4.2.1 程序编译 (57)4.2.2 执行DEBUG命令 (57)4.2.3 运行程序 (57)4.2.4 在DEBUG模式中进行调试 (58)4.2.5 跟踪被当前程序调用的程序 (58)4.2.6 一定要退出DEBUG模式 (59)4.2.7 补充 (59)4.3 跟踪批处理程序( From qingzhou) (60)4.4 常见的出错信息 (60)4.4.1 编译程序时的出错信息 (60)4.4.2 运行时的出错信息 (62)5 CL、CMD (62)5.1 CL程序 (62)5.1.1 基本认识 (62)5.1.2 CL程序的常用语法及命令: (63)5.1.3 不常用的语法 (65)5.2 CMD (66)6 屏幕文件及使用 (67)7 其它 (67)7.1 报表打印 (72)7.2 SA VF,备份与恢复 (77)7.3 菜单--MENU (78)7.4 开发时常用的命令 (78)7.5 一点想法 (81)1简单说明内部交流、或可作培训使用。
AS400基础培训
AS400基础培训AS/400基础培训⽬录1AS/400体系结构介绍 (2)1.1AS/400性能概述 (2)1.2对象和对象管理 (2)1.3⼯作管理 (3)2AS/400的基本操作 (4)2.1菜单、⼊⼝、列表和信息 (4)2.2常⽤命令 (5)3ILE RPG/400编程⼊门 (6)3.1⽂件的创建和操作 (6)3.1.1物理⽂件 (6)3.1.2逻辑⽂件 (7)3.2ILE RPG程序编写 (7)3.2.1常⽤规范表 (7)3.2.2内部函数 (9)3.2.3表达式 (9)3.2.4操作码 (10)3.3模板学习 (11)3.4编程练习 (12)4SQL/400介绍 (12)1AS/400体系结构介绍1.1 AS/400性能概述集成性AS/400把数据库、通讯、安全性等功能集中在操作系统中,最⼤限度地实现了各功能之间的兼容性。
开放性⽀持SNA、TCP/IP协议,DB2/400可与⼤多数数据库系统实现互联。
可移植对SPEC1170的⽀持可达到95%,相当于⼀般UNIX操作系统。
兼容性所有应⽤可上下兼容。
可连接性哑终端(5250)、仿真终端(PC Communication、Client Access、GUI)可⽀付性可扩充性1.2 对象和对象管理基于对象AS/400中,MI由指令和对象组成。
也就是说,AS/400是基于对象(object-based)的系统,⽽不是⼀个⾯向对象(object-oriented)的系统。
在AS/400中,对象不具备集成性,也没有类和⼦类的概念。
在AS/400的定义中,系统上所有可存储和检索的东西,都叫做对象。
对象由描述这个对象的描述和它的值组成。
对象的描述包括:名称、类型、⼤⼩、建⽴⽇期、建⽴对象者提供的简单描述、以及存储对象的库的名称。
对象的要素⽬录名、对象名和对象类型唯⼀确定⼀个对象。
对象⽬录AS/400中的⽬录结构是单层的,因此对象的表达形式为“Library/Object”。
AS400培训资料(上)
AS400培训资料(上)AS400应用开发基础知识培训教材前言本教材提供给参与本次项目开发的项目成员,目的是使大家能够尽快地掌握基本的程序开发。
本次培训分两阶段,第一阶段讲解AS400的数据文件和基本的RPG编程内容共四章。
第二阶段讲解AS400的较为深入的内容以及交易程序的编写。
在教材中对于AS400的技术理论不作过多的讲解,主要围绕RPG编程使用的物理文件,逻辑文件,程序三块进行讲解。
结合我们在以前项目的培训的过程中学员反映的重点和难点,根据我们个人的理解,对一些概念进行了通俗化的描述。
在讲解过程中,将通过及时的交流和沟通,尽量的把大家都带入门由于时间短和水平有限,在教材中和讲解中难免有错漏,请大家见谅!教材编写组第一章物理文件的建立物理文件用于存放数据使用SEU进行编辑产生的MEMBER不是物理文件,而是物理文件的定义物理文件一般由MEMBER编译产生后,但它的存在不会依赖MEMBER 的存在源物理文件是特殊的物理文件,用于存放各类源代码的定义,在本章中若无特殊说明物理文件均指存放数据(RECORD)的物理文件(PF-DTA)物理文件的删除,必须在删除建立在该物理文件上的逻辑文件删除之后物理文件的数据,受已经建立的逻辑文件影响,如非重复关键字或非重复关键字组合(即这些关键字能够唯一确定一条记录)在RPG程序中因为效率的原因,一般不使用物理文件进行操作建立物理文件的准备建立 Library的操作CRTLIB + Library的名字直接按默认的配置生成或Create Library (CRTLIB)Type choices, press Enter.Library . . . . . . . . . . . . > SSS NameLibrary type . . . . . . . . . . *PROD *PROD, *TESTText 'description' . . . . . . . 这是一个用来测试的 LibraryBottoF3=Exit F4=Prompt F5=Refresh F10=Additional parameters F12=Cancel建立存放源程序的源物理文件建立源物理文件的方法Create Source Physical File (CRTSRCPF)Type choices, press Enter.File . . . . . . . . . . . . . . wjdsrc NameLibrary . . . . . . . . . . . sss Name, *CURLIBRecord length . . . . . . . . . 92 NumberMember, if desired . . . . . . . *NONE Name, *NONE, *FILEUser specified DBCS data . . . . *yes *NO, *YESText 'description' . . . . . . . 这是测试用的源文件BottoF3=Exit F4=Prompt F5=Refresh F10=Additional parameters F12=Cancel备注: User specified DBCS data 该项必须选择*yes,否则在建立的SRCPF中将不能使用汉字进入源物理文件(SRCPF)的方法STRPDM 3Specify Members to Work WithType choices, press Enter.File . . . . . . . . . . wjdsrc Name, F4 for listLibrary . . . . . . . . sss *LIBL, *CURLIB, nameMember:Name . . . . . . . . . *ALL *ALL, name, *generic*Type . . . . . . . . . *ALL *ALL, type, *generic*, *BLANK或使用WRKOBJPDM+F4或 WRKLIBPDM+F4或 WRKMBRPDM+F4在以上命令中若不使用F4则将使用最近一次使用的环境建立定义物理文件的(类型为PF)MEMBER使用F6键产生新的MemberStart Source Entry Utility (STRSEU)Type choices, press Enter.Source file . . . . . . . . . . > WJDSRC Name, *PRVLibrary . . . . . . . . . . . > SSS Name, *LIBL, *CURLIB, *PRV Source member . . . . . . . . . wjd tstpf Name, *PRV, *SELECTSource type . . . . . . . . . . pf Name, *SAME, BAS, BASP...Text 'description' . . . . . . . 这是测试用的PFBottF3=Exit F4=Prompt F5=Refresh F12=Cancel F13=How to use this displayAS400的编辑器SEU的内容,常用的操作使用编辑器进行物理文件的结构定义执行后进入以下画面Columns . . . : 1 71 Edit SSS/WJDSRC 名称SEU==>行命令输入区 WJDTSTPFFMT PF ++++++RLen++TDpB......Functions+++++++++++++++++ 提示行*************** Beginning of data ************************************''''''''''''''''''''''''''''行号序号区域''' 内容输入区'''''''''''''''''''''''''''''''''''''''''''''''''****************** End of data ***************************************F3=Exit F4=Prompt F5=Refresh F9=Retrieve F10=Cursor F11=Toggle行命令区域常用的命令T 移到头部 B 移到尾部F+字符串(不必用引号) 查找字符串C + 要替换的字串+替换成的字串 (+A) 替换字符串(或全部替换)行号序号区域常用的命令I 插入一行 In 插入n行D 删除一行 Dn 删除n行DD 将两个DD之间的行删除.C 将本行进行拷贝,此命令必须与A或B配合使用CC 将两个CC之间的行进行拷贝,此命令必须与A或B配合使用M 将本行进行移动,此命令必须与A或B配合使用MM 将两个MM之间的行进行移动,此命令必须与A或B配合使用A –after 将拷贝或移动的行放到本行后面B—before 将拷贝或移动的行放到本行后面在本区域输入行号可以快速将编辑窗口移到所输的行(以该行作第一行)请大家在今后的练习中多加使用!!一个物理文件的DDSColumns . . . : 1 71 Edit SSS/WJDSRCSEU==> WJDTSTPFFMT PF ++++++RLen++TDpB......Functions+++++++++++++++++ *************** Beginning of data ************************************ 0001.00 A R WJDPF0001.01 A* 上行是说明记录的名称 PF0002.00 A PENUMB 3P 00002.01 A* 上行是将个人序号说明为3位长度的整数(小数长度为 0 )0003.00 A COLHDG(' 个人序号 ')0004.00 A PENAME 10O0004.01 A* 上行将个人中文名说明为 10 个汉字长0005.00 A COLHDG(' 个人中文名 ')0006.00 A PEENNM 12A0006.01 A* 上行将个人英文名说明为 12 个字母长度0007.00 A COLHDG(' 个人英文名 ')0008.00 A PESARY 7P 20008.01 A* 上行将每日消费说明为 7 位长,其中小数位为 2 位长的数值0009.00 A COLHDG(' 每日消费 ')****************** End of data ***************************************F3=Exit F4=Prompt F5=Refresh F9=Retrieve F10=Cursor F11=ToggleCOLHDG用来在进行数据的显示DSPDBF(见P19)和UPDDTA(见P18)时作为域的说明,便于理解域的内容,若不使用COLHDG则这些内容为定义域时的域名,如个人序号将为 PENUMB注意: 在输入COLHDG的)时window的输入法可能不是处于中文状态!!!因此输入的)可能为中文的)造成错误(亮条)此时屏幕出现MEMBER 存盘ExitType choices, press Enter.Change/create member . . . . . . . Y Y=Yes, N=NoMember . . . . . . . . . . . . . WJDTSTPF Name, F4 for listFile . . . . . . . . . . . . . . WJDSRC Name, F4 for listLibrary . . . . . . . . . . . . SSS NameText . . . . . . . . . . . . . . 这是测试用的PFResequence member . . . . . . . . Y Y=Yes, N=NoStart . . . . . . . . . . . . . 0001.00 0000.01-9999.99Increment . . . . . . . . . . . 01.00 00.01-99.99Print member . . . . . . . . . . . N Y=Yes, N=NoReturn to editing . . . . . . . . . N Y=Yes, N=NoGo to member list . . . . . . . . . N Y=Yes, N=No此时若想取消本次修改的内容则Change/create member选项改为N 存盘后产生Member wjdtstpfWork with Members Using PDM S105067File . . . . . . WJDSRCLibrary . . . . SSS Position to . . . . .Type options, press Enter.2=Edit 3=Copy 4=Delete 5=Display 6=Print 7=Rename8=Display description 9=Save 13=Change text 14=Compile 15=Create module. Opt Member Type TextWJDTSTPF PF 这是测试用的PFBottoParameters or command===>F3=Exit F4=Prompt F5=Refresh F6=Create将定义物理文件的MEMBER编译产生物理文件PF的编译方法为了把数据文件和源文件分开先建立存放PF的Library使用命令CRTLIB SSSDTA方法一使用方法二直接在Member前的OPT中选择Work with Members Using PDM S105067File . . . . . . WJDSRCLibrary . . . . SSS Position to . . . . .Type options, press Enter.2=Edit 3=Copy 4=Delete 5=Display 6=Print 7=Rename8=Display description 9=Save 13=Change text 14=Compile 15=Create module. Opt Member Type Text14 WJDTSTPF PF 这是测试用的PFBottoParameters or command===>F3=Exit F4=Prompt F5=Refresh F6=Create按下F4后出现CRTPF的画面Create Physical File (CRTPF)Type choices, press Enter.File . . . . . . . . . . . . . . > WJDTSTPF NameLibrary . . . . . . . . . . . > SSSDTA Name, *CURLIB Source file . . . . . . . . . . > WJDSRC NameLibrary . . . . . . . . . . . > SSS Name, *LIBL, *CURLIB Source member . . . . . . . . . > WJDTSTPF Name, *FILE Record length, if no DDS . . . . NumberGeneration severity level . . . 20 0-30Flagging severity level . . . . 0 0-30File type . . . . . . . . . . . *DATA *DATA, *SRC Member, if desired . . . . . . . *FILE Name, *FILE, *NONE User specified DBCS data . . . . *NO *NO, *YESText 'description' . . . . . . . *SRCMBRTXT。
AS400-RPG入门
AS400-RPG入门LT一:RPG介绍RPG程序的特点:1.程序的编写对于每一个位置都有明确的定义,所以程序的编写必须在指定的位置开始。
通过使用ILE工具可以进行一些方便的输入。
2. RPG程序的设计针对每一部分都有严格的要求,有相应的规格说明,他们包括a) 配置规格说明(Control Specifications):主要规定了程序的命名,日期格式等信息。
b) 文件描述说明(File Description Specifications):对程序使用到的文件的说明c) 定义说明(Definition Specifications):主要对程序使用的数据进行说明。
d) 输入说明(Input Specifications):主要对文件输入数据进行说明。
e) 计算说明(Calculation Specifications):主要对数据计算和计算顺序的说明。
f) 输出说明(Output Specifications):主要针对数据的输出记录和字段的说明。
g) 子程序说明:包括有三种,对子程序的各种进行进行了定义说明。
3.指示器(Indicators)通常是一个字节,被设置为‘0’或者‘1’,他主要作为程序操作的结果或者进行操作的条件。
好像程序的逻辑开关,决定着程序的流程。
指示器必须在定义规范中进行定义。
RPG VI也有一些系统的指示器,他们一般是两个字符的变量,如LR等。
指示器可以在程序的任何地方使用,也可以在程序中修改他的值。
4.操作代码相当与汇编语言的命令一样,有RPG程序提供一套完整的操作代码,比如读一条数据使用READ ,RPG程序对操作代码进行了分类,比如字符串操作符,数组操作符等。
5.定义描述文件a) 文件服务是程序和IO设备的连接。
系统里的每一个文件都有相应的描述文件,对文件的特性和数据的组织形式进行描述。
如果在程序中要使用IO操作,必须要指定一个描述文件,对IO的设备进行描述。
对于文件的类型,系统支持以下几种:1. 数据库文件(database files):对数据进行持久存储。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5 CL、CMD其实有关这一章,以及屏幕文件的,在网上已经有很多人写过了,想了想,还是说一下吧。
5.1 CL 程序5.1.1 基本认识简单的理解,CL 程序就是和RPG 相对应的,是控制语言(Control Language)。
类型为CLP、CLLE 的源代码编译出来的程序,都属于CL 程序。
可能还是不够直观,这么说吧,我们在交互式命令行上输入的命令,用程序的方式来执行,这个执行的程序,就是CL 程序。
学过UNIX 的会比较好懂,CL 程序有点类似于SHELL,不过SHELL 是可以直接执行的,而且不用编译;CL 程序需要编译,而且要用CALL 的方式来执行。
不过原理是接近的,都是在程序中直接调用命令行的语句。
所以说,CL 程序其实很好写,只要会输入命令,就可以写CL 程序了。
在编辑CL 程序时,也可以用“命令+ F4”的方式来写,不需要老老实实的整行输入。
CL 程序不像RPGLE 程序,在编写时,可以使用自由格式书写;一行的内容如果太长要,在最末尾处用“+”表示换行举个最简单的例子,比如说新建个名为FHS01CL 的CLP 源程序,代码如下:PGMWRKACTJOBENDPGM编译此程序,然后CALL 之,系统就会执行命令WRKACTJOB,查看当前的活动作业,效果与在交互式命令行下输入WRKACTJOB 是一样的。
当我们输入F12,退出WRKACTJOB 时,系统就会继续向下执行,发现是ENDPGM,表示程序结束了,于是判定执行完毕,退出至交互式画面。
5.1.2 CL 程序的常用语法及命令:一、程序的开始与结束:PGM PARM(&A &B) /* 开始CL 程序*/ENDPGM /* 结束CL 程序*/CL 程序,和RPGLE 程序一样,也可以有程序的入口参数,而且程序的入口参数都是可传递的(也就是输入的参数如果在程序中被修改过,那么原调用的程序中的相应参数也会进行变化。
不过CL 的入口参数只能为字符型,或数字型的单个字段,不能象RPGLE 程序中那么多样化(字段、结构、数组、指针)。
如果CL 程序没有入口参数时,那么就可以不需要后面的PARM 语句,直接写成PGM即可。
写CL 程序时,不妨多使用F4,看看系统的帮助,这样就不用记那么多命令的参数名。
二、变量及其定义CL程序中的所有变量,都使用&做为前缀,这一点与RPGLE 程序不同。
比如说PGM PARM(&A &B)就表示入口参数为A、B 这两个变量在CL 程序中使用到的变量,都必须使用DCL 语句来定义:DCL VAR(&FLD01) TYPE(*CHAR) LEN(10)DCL VAR(&FLD02) TYPE(*DEC) LEN(10 2)上述语句表示:定义变量FLD01,10 位长的字符型变量定义变量FLD02,10 长,其中2 位小数的数字型变量除了字符、数字之外,CL 程序还可以定义逻辑变量(*LGL),逻辑变量允许的值只能为’1’或’0’。
不过通常有字符与数字也就够了。
CL 程序的主要功能在于进行命令处理,而不是处理字符串以及数据库三、CL 常用命令:CHGVAR -- 变量赋值CHGVAR VAR(&FLD01) VALUE(‘ABCD’)即是将变量FLD01 赋值成为’ABCD’(左对齐),同理,VALUE 的括号中也可以填写一个变量,即表示将此变量的值赋值到变量FLD01 中。
数字型变量的赋值同样也是使用CHGVAR 语句。
当变量中只包含数字时(0—9),数字型变量与字符型变量可以使用CHGVAR 语句进行转换,这一点与RPGLE 中的MOVE 语句比较类似。
IF -- 条件判断语句IF COND(&FLD01 *EQ '1') THEN(CHGVAR VAR(&FLD02) +VALUE('0'))当变量FLD01 等于’1’时,将变量FLD02 中的值更改为’0’THEN 后面,即是当符合条件时,要执行的命令。
写起来其实没有看上去那么复杂,多用F4 就会发现CL 程序写简单。
就比如上例,先写IF,然后按F4,在Condition 处填写条件语句,然后在Command 处填上CHGVAR,再按F4,再去填相应的处理语句,这样写,就比直接把整句抄下来就简单多了。
上面这种写法,只能在符合条件时,执行一条CL 语句;如果要执行多条,就必须写做:IF COND(&FLD01 *EQ '1') THEN(DO)CHGVAR VAR(&FLD02) VALUE(‘0’)其它执行语句ENDDO也就是THEN 后面,用DO,表示接下来的语句都是在这个IF 条件成立时才执行(DO)的。
然后结束处用ENDDO,必须要有。
ENDDO 在这里和循环没有任何关系,表示的是ENDIF 的意思,但是CL 语句里没有ENDIF,只有ENDDO。
IF 语句中,表示判断的关键字与RPGLE 中的Ifxx 操作码类似,有*EQ *GT *LT *GE *LE *NE用来表示逻辑关系的关键字有*AND, *OR, *NOTGOTO -- 跳转语句GOTO 语句与RPGLE 中的GOTO 是一样的,都是跳转的意思。
FHSTAG:GOTO CMDLBL(FHSTAG)注意,这里定义标签是用“:” 冒号MONMSG -- 监控错误信息我们使用CL 语句时,执行的命令可能会报出一些异常错误,从而导致整个程序中断,需要手工干预。
MONMSG 命令可以监控我们预定的错误信息,使CL 程序正常的向下运行。
举例而言,如果CL 程序中有如下语句:CALL PGM(FHS01R)MONMSG MSGID(CPF4131)则表示当系统调用程序FHS01R 时,如果发现有CPF4131(声明的文件重新编译过,但程序未重新编译)的错,那么CL 程序将不会异常中断,仅仅只是不运行程序FHS01R,然后继续向下执行CL 程序MONMSG 还可以用于在监控到错误信息之后,进行处理,如下:CALL PGM(FHS01R)MONMSG MSGID(CPF4131) EXEC(CHGVAR VAR(&FLD01) +VALUE('0'))这句话就表示当发现有CPF4131 的错误之时,将变量FLD01 赋值成为’0’如果要执行多句的话,和IF 语句的方法类似,也是使用DO 与ENDDO MONMSG MSGID(CPF4131) EXEC(DO)CHGVAR VAR(&FLD01) VALUE(‘0’)其它处理语句ENDDO5.1.3 不常用的语法%SST -- 取字符串CHGVAR VAR(&FLD01) VALUE(%SST(&FLD02 3 1))表示将字符变量FLD02,从第3 位开始,取1 位,左对齐赋值到变量FLD01 中。
%SST 的括号的参数中,第一个参数必须为字符型变量,第二个参数表示起始位,第三个参数表示要截取的长度。
*CAT -- 拼字符串DCL VAR(&FLD01) TYPE(*CHAR) LEN(10)CHGVAR VAR(&FLD01) VALUE('A' *CAT 'B')即表示将10 位长的字符型变量赋值成为’AB ‘‘A’,‘B’,也可以使用变量,如CHGVAR VAR(&FLD01) VALUE(&FLD02 *CAT &FLD03)要注意,*CAT 不能去掉字符串末尾的空,从效果上来看,有点类似于RPGLE 中的EVAL 操作码,而不是CAT 操作码+、-、*、/ -- 数学运算数字型变量,可以进行数学运算CHGVAR VAR(&FLD01) VALUE(&FLD01 + &FLD02)即等同于RPGLE 程序中的EVAL FLD01 = FLD01 + FLD02同理,-、*、/ 分别对应减、乘、除不过数学运行常用于RPGLE 程序中,较少用在CL 控制里面,这里只是介绍一下。
读取文件:(From Cuer:P1421)DCL VAR(&FLD01) TYPE(*CHAR) LEN(2)DCLF FILE(FHSLIB/PFFHS)RCVFCHGVAR VAR(&FLD01) VALUE(&FHS01)以上这段CL 的意思,就是在CL 程序中读取PFFHS 文件,然后将读到的第一条记录赋值到CL 的临时变量FLD01 中。
如果要将一个文件从头读到尾,则可以用如下语句来实现:DCLF FILE(FHSLIB/PFFHS)LOOP:RCVFMONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(EXIT))读取到每条记录后的处理语句GOTO CMDLBL(LOOP)EXIT:也就是说,信息CPF0864,即表示未读取到记录。
在CL 程序中声明文件使用DCLF 语句,一个CL 文件中只能声明一个文件,声明语句必须在CL 控制语句之前。
使用声明的文件中的字段,同样需要在字段名前加上“&” ;CL 程序中,无法控制游标,无法对记录进行定位操作。
所以CL 程序对文件的操作是比较弱的,通常我最多只用来读取某些只含少量记录的参数文件。
5.2 CMDCMD 是用来生成命令的,执行后可以像其它系统命令一样,直接输入命令,或是F4,不需要像CLP 一样,要CALL 一下。
其实CMD 本质上也是执行CLP 或RPGLE(在编译时指定),用起来,无非就是好看点,直接一些,除此之外的意义,似乎也就没什么了。
举个例子,比如我们查看一个文件中的内容时,可以使用SQL 来查看,也可以使用命令RUNQRY 命令来实现(RUNQRY QRYFILE(文件名))。
但在我们要频繁查看文件时,这两种方式似乎都不是很爽,也就是说要输入的内容都不是最少的,那我们可以设计一个CMD,譬如说叫SEE,希望实现的最终效果,是在命令行输入“SEE 文件名”,就可以查看PF 文件中的记录。
那么,我们按如下步骤来实现:1. 建立一个CLP 程序,比如叫SEECLP,代码如下PGM PARM(&FILENAME)RUNQRY QRYFILE(&FILENAME)ENDPGM2. 编译此程序3. 建立一个CMD 程序(即源代码的属性为CMD),代码如下:CMD PROMPT(' 显示文件记录')PARM KWD(NAME) TYPE(*CHAR) LEN(10) MIN(1) +CHOICE(' 显示文件记录内容') +PROMPT('Display file record')4. 编译此CMD,用F4,可见如下画面:Create Command (CRTCMD)Type choices, press Enter.Command . . . . . . . . . . . . > SEE NameLibrary . . . . . . . . . . . > FHSLIB Name, *CURLIBProgram to process command . . . > SEE Name, *REXXLibrary . . . . . . . . . . . > *LIBL Name, *LIBL, *CURLIBSource file . . . . . . . . . . > FHSFILE NameLibrary . . . . . . . . . . . > FHSLIB Name, *LIBL, *CURLIBSource member . . . . . . . . . > SEE Name, *CMDThreadsafe . . . . . . . . . . . *NO *YES, *NO, *COND其中,蓝色字体显示的,就是我们需要输入这个CMD 要调用的程序名(默认值与CMD同名),这里我们将此项内容填为SEECLP,表示SEE 这个CMD,调用的是SEECLP 这个程序5. 编译成功之后,我们在命令行执行“SEE 文件名” ,就可以看到指定文件的记录。