大家帮忙来找茬(到底RPG程序错在哪?)
[code:1:63ad37c5f3]下图是维护程序主档文件的DDS。
*************** Beginning of data *************************************
0001.00 A* CUSTOMER MASTER FILE--CUSTSTR
0002.00 A R CSTMST
0003.00 A CUST# 5S 0 TEXT(’CUSTOMER NUMBER‘)
0004.00 A CSTNAM 20 TEXT(’CUSTOMER NAME’)
0005.00 A CSTAD1 20 TEXT(’CUSTOMER ADDRESS‘)
0006.00 A CSTAD2 20 TEXT(’CUSTOMER ADDRESS’)
0007.00 A CSTCTY 20 TEXT(’CUSTOMER CITY‘)
0008.00 A CSTSTE 2 TEXT(’CUSTOMER STATE’)
0009.00 A CSTZIP 5S 0 TEXT(’CUSTOMER ZIP CODE‘)
0010.00 A K CUST#
****************** End of data ****************************************
下图是客户主档文件查询的显示设备文件的DDS。
SEU==> CSTENT
FMT DP .....AAN01N02N03T.Name++++++RLen++TDpBLinPosFunctions++++++++++++++++++
*************** Beginning of data *************************************
0001.00 A REF(CUSTMSTR)
0002.00 A CHGINPDFT(CS)
0003.00 A PRINT(QSYSPRT)
0004.00 A INDARA
0005.00 A R HDRSCN
0006.00 A TEXT(PROMPT FOR CUST NUMBE
0007.00 A CA03(03 END OF INQUIRY)
0008.00 A CA05(05 ADD MODE)
0009.00 A CA06(06 UPDATE MODE)
0010.00 A CA07(07 DELETE MODE)
0011.00 A CA08(08 DISPLAY MODE)
0012.00 A MODE 8A O 1 40DSPATR(HI)
0013.00 A 1 13MODE
0014.00 A DSPATR(HI)
0015.00 A 2 4TIME
0016.00 A DSPATR(HI)
0017.00 A 2 28CUSTOMER FILE MAIN
0018.00 A DSPATR(RI)
0019.00 A 2 70DATE
0020.00 A EDTCDE(Y) DSPATR(HI)
0021.00 A CUST# R Y I 10 25DSPATR(CS)
0022.00 A CHECK(RZ)
0023.00 A 51 ERRMSG(CUSTOMER ON FILE 5
0024.00 A 52 ERRMSG(NOT ONFILE 52)
0025.00 A 10 33<--ENTER CUSTOMER NUMBER
0026.00 A DSPATR(HI)
0027.00 A 23 4F3 END JOB
0028.00 A 23 21F5 ADD
0029.00 A 23 34F6 UPDATE
0030.00 A 23 50F7 DELETE
0031.00 A 23 66F8 DISPLAY
0032.00 A R CSTINQ TEXT(DISPLAY CUST INFO)
0033.00 A CA12(12 PREVIOUS SCREEN)
0034.00 A*
0035.00 A MODE 8 O 1 4DSPATR(HI)
0036.00 A 1 13MODE
0037.00 A DSPATR(HI)
0038.00 A 2 4TIME
0039.00 A DSPATR(HI)
0040.00 A 2 28CUSTOMER FILE MAINTENANCE
0041.00 A DSPATR(HI RI)
0042.00 A 2 70DATE EDTCDE(Y) DSPATR(HI)
0043.00 A 4 14CUSTOMER
0044.00 A DSPATR(HI UL)
0045.00 A CUST# R O 4 25DSPATR(HI)
0046.00 A CSTNAM R B 6 25DSPATR(CS)
0047.00 A 04 DSPATR(PR)
0048.00 A CSTAD1 R B 7 25DSPATR(CS)
0049.00 A 04 DSPATR(PR)
0050.00 A CSTAD2 R B 8 25DSPATR(CS)
0051.00 A 04 DSPATR(PR)
0052.00 A CSTCTY R B 9 25DSPATR(CS)
0053.00 A 04 DSPATR(PR)
0054.00 A CSTSTE R B 10 25DSPATR(CS)
0055.00 A 04 DSPATR(PR)
0056.00 A CSTZIP R B 10 40DSPATR(CS)
0056.01 EDTCDE(Z)
0057.00 A 04 DSPATR(PR)
0057.01 A 23 2F12 CANCEL
0057.02 A MODE1 8 O 23 20
0058.00 A R CSTBLD TEXT(ADD CUST RECORD)
0059.00 A CA12(12 PREVIOUS SCREEN)
0060.00 A MODE 8 O 1 40DSPATR(HI)
0061.00 A 1 13MODE DSPATR(HI)
0062.00 A 2 4TIME DSPATR(HI)
0063.00 A 2 28CUSTOMER FILE MAINTENANCE
0064.00 A DSPATR(HI)
0065.00 A 2 70DATE EDTCDE(Y) DSPATR(HI)
0066.00 A 4 14CUSTOMER: DSPATR(HI UL)
0067.00 A CUST# R O 4 25DSPATR(HI)
0068.00 A 6 20NAME DSPATR(HI)
0069.00 A CSTNAM R I 6 25
0070.00 A 7 17ADDRESS DSPATR(HI)
0071.00 A CSTAD1 R I 7 25
0072.00 A 8 17ADDRESS DSPATR(HI)
0073.00 A CSTAD2 R I 8 25
0074.00 A 9 20CITY DSPATR(HI)
0075.00 A CSTCTY R I 9 25
0076.00 A 10 19STATE DSPATR(HI)
0077.00 A CSTSTE R I 10 25
0078.00 A 10 36ZIP DSPATR(HI)
0079.00 A CSTZIP R I 10 40
0080.00 A 23 2CANCEL ADDITION
****************** End of data ****************************************
这个显示文件的DDS包含3种记录格式:HDRSCN 和CSTINQ 和 CSTBLD。HDRSCN记录格式提示客户和处理方式,CSTINQ记录被用于更新,删除和显示方式。
下面这个程序维护客户主档文件,具有增加,修改和删除功能,也可以用这个程序进行查询,
该程序首先设置处理的缺省(显示)方式,且显示客户维护提示屏,工作站可以按功能键3,请求终止作业,否则,用户输入客户号且按ENTER,用户可以通过功能键 5增加 6更新 7删除 8显示。
为了增加新记录到文件中,程序使用客户号做搜索变元检索主档文件,如果该记录在文件中不存在,程序显示CSTBLD屏幕,允许用户输入一新客户记录。如果该记录已在文件中,则显示错误信息,用户可以按功能键12(它把指示符12为ON)取消增加操作且释放该记录。否则,用户输入新客户信息到输入域且写到主档文件中。
为更新、删除、或显示一条现存记录,程序用客户号作为搜索变元检索主档文件。如果该客户记录存在于文件中,程序显示客户文件查询屏幕CSTINQ,如果记录不在文件,则显示一个错误信息,如果处理方式是显示或是删除,则输入域是写保护的,否则,用户可输入新信息到输入域中,更新客户记录,用户可按功能键12,它设置指示符12为ON,来取消更新或删除操作,且释放该记录。
*************** Beginning of data ***********************************
0001.00 FCUSTMSTRUF E K DISK A
0002.00 FCSTENT CF E WORKSTN
0003.00 C CSTKEY KLIST
0004.00 C KFLD CUST#
0005.00 C MOVE DISPLAY MODE
0006.00 C EXFMTHDRSCN
0007.00 C *IN03 DOWEQ0
0008.00 C EXSR SETMOD
0009.00 C CUST# IFNE *ZERO
0010.00 C MODE CASEQADD ADDSUB
0011.00 C MODE CASEQUPDATE UPDSUB
0012.00 C MODE CASEQDELETE DELSUB
0013.00 C MODE CASEQDISPLAY INQSUB
0014.00 C END
0015.00 C END
0016.00 C EXFMTHDRSCN
0017.00 C END
0018.00 C MOVE 1 *INLR
0019.00 C ADDSUB BEGSR
0020.00 C CSTKEY CHAINCSTMST 50
0021.00 C *IN50 IFEQ 0
0022.00 C MOVE 1 *IN51
0023.00 C ELSE
0024.00 C MOVE 0 *IN51
0025.00 C MOVE *BLANK CSTNAM
0026.00 C MOVE *BLANK CSTAD1
0027.00 C MOVE *BLANK CSTAD2
0028.00 C MOVE *BLANK CSTCTY
0029.00 C MOVE *BLANK CSTSTE
0030.00 C MOVE *BLANK CSTZIP
0031.00 C EXFMTCSTBLD
0032.00 C *IN12 IFEQ 0
0033.00 C WRITECSTMST
0034.00 C END
0035.00 C END
0036.00 C ENDSR
0037.00 C**************************************************
0038.00 C UPDSUB BEGSR
0039.00 C MOVE 0 *IN04
0040.00 C CSTKEY CHAINCSTMST 52
0041.00 C *IN52 IFEQ 0
0042.00 C EXFMTCSTINQ
0043.00 C *IN12 IFEQ 0
0044.00 C UPDATCSTMST
0045.00 C ELSE
0046.00 C EXCPTRLS
0047.00 C END
0048.00 C END
0049.00 C ENDSR
0050.00 C*************************************************
0051.00 C DELSUB BEGSR
0052.00 C MOVE 1 *IN04
0053.00 C CSTKEY CHAINCSTMST 52
0054.00 C *IN52 IFEQ 0
0055.00 C EXFMTCSTINQ
0056.00 C *IN12 IFEQ 0
0057.00 C DELETCSTMST
0058.00 C ELSE
0059.00 C EXCPTRLS
0060.00 C END
0061.00 C END
0062.00 C ENDSR
0063.00 C***************************************************
0064.00 C INQSUB BEGSR
0065.00 C MOVE 1 *IN04
0066.00 C CSTKEY CHAINCSTMST 52
0067.00 C *IN52 IFEQ 0
0068.00 C EXFMTCSTINQ
0069.00 C EXCPTRLS
0070.00 C END
0071.00 C ENDSR
0072.00 C**************************************************
0073.00 C SETMOD BEGSR
0074.00 C *IN05 IFEQ 1
0075.00 C MOVE ADD MODE
0076.00 C MOVE MODE MODE1
0077.00 C ELSE
0078.00 C *IN06 IFEQ 1
0079.00 C MOVE UPDATE MODE
0080.00 C MOVE MODE MODE1
0081.00 C *IN07 IFEQ 1
0082.00 C MOVE DELETE MODE
0083.00 C MOVE MODE MODE1
0084.00 C *IN08 IFEQ 1
0085.00 C MOVE DISPLAY MODE
0086.00 C MOVE MODE MODE1
0087.00 C ELSE
0088.00 C END
0089.00 C END
0090.00 C END
0091.00 C END
0092.00 C ENDSR
0093.00 OCSTMST E RLS
****************** End of data **************************************** [/code:1:63ad37c5f3]
| fairyboy 回复于:2004-04-27 11:16:11 |
| 以上的程序的功能
F3 END JOB F5 ADD F6 UPDATE 可以正常使用 但是F7 和 F8 功能 无法使用 请看下面程序运行的效果图 |
| fairyboy 回复于:2004-04-27 11:26:43 |
| 这是程序开进去时的画面,此时可以显示DISPLAY MODE 但是 没有DISPLAY 的功能 ,只要你转换到ADD 或UPDATE 显示画面后 ,就无法再转回DISPLAY显示画面。
注意:DELETE画面无法显示。 [code:1:e9e09167b3]DISPLAY MODE 11:36:37 CUSTOMER FILEMAINTENANCE 04/27/04 <--ENTER CUSTOMER NUMBER F3 END JOB F5 ADD F6 UPDATE F7 DELETE F8 DISPLAY[/code:1:e9e09167b3] |
| fairyboy 回复于:2004-04-27 11:29:40 |
| 这个是简单的RPG样本程序,有啥看不懂的地方我可以说给大家听。
希望大虾参与讲解给大家学习知识。 |
| yoyoage 回复于:2004-04-27 14:06:03 |
| check ur SETMOD subroutine.
make the use of if /else/end relation clear. |
| fairyboy 回复于:2004-04-28 08:15:22 |
| 呵呵 不错啊 原来是高手 HOHO |
| 红像 回复于:2004-04-28 12:47:32 |
| 这个小程序我以前玩过。本身就很简单了。 |
| michael9406 回复于:2004-04-28 12:57:27 |
| 0010.00 A CA07(07 DELETE MODE)
0011.00 A CA08(08 DISPLAY MODE) change to: 0010.00 A CF07(07 DELETE MODE) 0011.00 A CF08(08 DISPLAY MODE) |
| fairyboy 回复于:2004-04-28 13:11:43 |
| 只要在80和81行 之间插入ELSE
83和84行 之间插入ELSE 就可以了。 |
| 红像 回复于:2004-04-28 13:51:15 |
| [quote:42c34f036f="michael9406"]0010.00 A CA07(07 DELETE MODE)
0011.00 A CA08(08 DISPLAY MODE) change to: 0010.00 A ..........[/quote:42c34f036f] PS: [code:1:42c34f036f] Command function A record containing changed fields is returned to the program. Command attention A record is returned to the program but the record does not contain the data entered by the user and no field validation is performed. [/code:1:42c34f036f] |
| fairyboy 回复于:2004-04-28 14:18:57 |
| 幕后老大啊 厉害哦
你啥时玩过这个小程序的 |
| 多情包子 回复于:2004-04-28 14:55:21 |
| "只要你转换到ADD 或UPDATE 显示画面后 ,就无法再转回DISPLAY显示画面"
当然这样的,因为你的*in05 或者*in06没有初始化嘛,转换到ADD 或UPDATE 显示画面后 你的*in05 或者*in06 是*on状态! 按照你的程序流程,就不会display了!你的程序可读性太差! |
| 红像 回复于:2004-04-28 15:43:21 |
| 没有初始化不要紧,第一次执行还是可以的。只是执行一次以后就没有清零,就跳不走了。 只好退出。 |
| fairyboy 回复于:2004-04-28 16:00:13 |
| 只要按ENTER就可以就可以跳出来拉,如果你在UPDATE编辑画面中 ,只要再按一次ENTER就可以跳出UPDATE编辑画面,返回到UPDATE画面(不是 编辑画面) |
| 红像 回复于:2004-04-28 16:40:47 |
| OH, 原来是这样的。
ENTER的作用就是功能键清零吧。不说我是不知道D~~~ 呵呵,学了一招。 |
| dadaup 回复于:2004-04-28 20:14:02 |
| 这段程序好象是来在某一本400 的书上的吧? |
| laserjet1918 回复于:2004-04-28 23:27:41 |
| 我总觉着,转入任何一个mode 以后,根本不可能在跳出来,根本没定义相应的CF,你定义的cf 只是在第一个记录中!!另外,在其他
的画面中,display,add,update,要添加相应的cf,要做相应的setmode才行, 别是蒙人的吧,@^@ |
| fairyboy 回复于:2004-04-29 08:12:33 |
| 只要在80和81行 之间插入ELSE
83和84行 之间插入ELSE 后 程序可以正常运行。 这个段小程序的功能就是:增加记录(ADD) 修改记录(UPDATE) 删除记录(DELETE) 显示记录(DISPLAY) 没有模糊查询功能的,程序我这都运行过了,没有死循环的情况。 |
| fairyboy 回复于:2004-04-29 08:15:51 |
| 由于这是个样本程序,所以很多注释点语句我都没打上来,大家看的时候可能累点。
我想每个学习RPG程序的人,一开始大概也就是从这样的简单的样本程序开始起步的。 顺便提一句,上个程序中的出错信息也无法显示哦,!! |
| 红像 回复于:2004-04-29 09:40:44 |
| [quote:78c4790b41="dadaup"]这段程序好象是来在某一本400 的书上的吧?[/quote:78c4790b41]
台湾的一本400例子集。还是繁体的。市面上买不到的,我记得好像是赠书。 |
| fairyboy 回复于:2004-04-29 10:30:39 |
| 大家有没有小程序 拿出来 大家分析一下 长点知识。 |
| xiayu176 回复于:2004-04-29 14:25:04 |
| 这个程序的DDS部分不能用吧?我把你的程序放在DDS中,但用command 17 (Change using SDA)进去后在 DDS Error 一栏处显示 *ERROR.
这是为什么啊? |
| xiayu176 回复于:2004-04-29 14:39:55 |
| 呵呵,现在可以用啦 |
| fairyboy 回复于:2004-04-29 14:44:40 |
| 如果想要出现错误信息,只要先程序定义ERRSFL字段,但是错误信息只能出现在左下角哦。 |
| fairyboy 回复于:2004-05-22 20:17:23 |
| 其实 程序在于逻辑性
我刚学RPG得时候 ,每一句 我都看不懂,后来对每一句 后面加注释,慢慢得,先看简单得程序,然后根据思路再自己编个小程序,一步一步来。 |
| fairyboy 回复于:2004-05-22 20:19:01 |
| 还有一个 在程序中 运用 TAG 和 GOTO 语句 ,有时候能把有些程序段边得容易理解。 |
| fairyboy 回复于:2004-05-22 20:23:16 |
| 5555555555555
快失业了 好惨 哦 |
| aeiou 回复于:2004-05-22 20:56:30 |
| 怎么搞得,一下子冒出来一句 快失业了 ? 偶们正招人呐~ |
| fairyboy 回复于:2004-05-23 10:00:58 |
| 哦 是不是在上海? |
最热门文章推荐:
>· hp笔记本电脑
>· 笔记本无线上网
>· 富士通笔记本
>· 清华同方笔记本
>· 笔记本选购
>· 长城笔记本
>· borland jbuilder
>· borland 数据库
↓相关文章:
- · 讨论:关于创建obj时的参数--share
- · 帮忙看看这段程序的问题出在哪里?
- · 《最后100天的AS400学习心情笔记》
- · 在一个PF中加一字段,用来表示记录的序号!
- · SLR60磁带机可以做200GB系统的全系统备份,何故?
- · 讨论系统设备的异动监控
- · 求助:存储过程的查找和COPY
- · 【步骤】使用SQL DTS功能实现从DB/2向SQL Server传输数据.
- · 请教:如何修改PF文件的CCSID值?
- · 关于触发器的初级问题,请用过的大虾指教
- · 如何使用FTP在PC和AS/400之间传输包含中文的文件
- · 各位前辈,小女子是400初学之初学
- · (原)在as400上更换硬盘
- · pcom各种版本的问题总结
- · (如何在iSeries(AS/400)將资料加密(ZT)
- · 急等 如何更改as/400 V4R5 如何更改IP地址
- · 通过Navigator配置实现PC端拨号登陆远程AS/400.
- · 高版本安全数据向低版本系统迁移问题
- · as400与windows如何互相传送文件
- · 【分享】如何实现直接从AS/400发送信息到指定的邮箱.
- · rpg的小问题谁能解决一下,先谢了!(新手)
- · CA连接不上,PCOMM正常使用,授权及网络正常。什么问题?
- · exfmt与write的区别
- · 在TCPIP基础上建立APPC连接
- · 硬盘利用率的问题
- · 如何利用RPG,CL和ACCESS制作一个条形码标签的打印程序?
- · domino的邮件问题 急! (居士快进)
- · 请教400上的文件问题
- · 如何用PC超级终端对RS6000完成控制及安装(希望是我的精品)
- · (原创) 7133-T40阵列故障解决实例
- · 又来临时抱佛脚了,请教s7a电源问题
- · 经验交流<如何在AIX下面更改before login banner>
- · 刚完成的一个hacmp 5.1 +db2 udb 8.1 ese环境下的HA配置!
- · [原创]SNORT&ACID install on AIX 5.2
- · 一光纤卡的问题的解决,有类似问题的可以参考
- · 使用SFU实现Windows和AIX文件共享-请求加精
- · ORACLE/RAC安装完全攻略
- · Step bye Step for Install the Domino server 7 on aix 5L 5.2
- · 199学习笔记(chap11)
- · 在cp时的怪问题
- · 一个系统频繁宕机(888 102 300 0C0)的案例分析与解决!!!
- · 个人总结-理解和使用aix的日志系统
- · VIO配置1
- · IY19375补丁打不上。-_-!!!
- · 老的文章不一定就没有用处了:)
- · 任何在aix下面看你的系统是32位还是64位的
- · 吃了一个“螃蟹”
- · 监视别人在登录后都输入了什么命令
- · Securing AIX 5L from Scratch
- · 如何确定pSeries和RS/6000 CPU的主频?
- · .kshrc的作用
- · AIX 5.2对用户登录界面的安全性的增强
- · 更改HACMP环境里网卡的ip地址
- · 做AIX rootvg的镜像
- · 替换SSA raid磁盘阵列中坏盘步骤
- · 2005-02-02 日的学习内容
- · 今天是大年初一
- · 谚语
- · awk将文件的两行合并为一行
- · aix 版本显示问题
- · Domino 6 AIX安装环境
- · aix操作系统的备份和恢复
- · 如何通过PC机的超级终端控制RS6000
- · HACMP的注意事项
- · AIX经验汇总
- · hacmp的定义和发展
- · hacmp 1.1.2--1.1.4(续1)
- · AIX中关于LVM中有几个关于容量的计算
- · AIX 初学者之梦
- · ODM
- · 开门大吉之我言
- · 2个lpar1个光驱的问题--NFS的应用
- · 还是嫩啊。
- · 三年之痒
- · AIX系统升级微码,打补丁.
- · 微码问题。
- · AIX学习笔记
- · AIX下,得到用户上次更改密码时间的脚本(原创)
- · AIX 性能调优-内存、CPU篇
- · AIX 性能调优-内存、CPU篇II

