RPGIV编程问题百解(30) CPF4203系统信息分析和处理
Major(280059419) 20:25:51
OPEN 文件 文件打不开。。是什么造成的啊?
福建★嘻嘻(11844279) 20:27:04
出错信息呢?
Major(280059419) 20:27:37
cpf4203
厦门★passthru(448081936) 20:50:47
在这之前做了什么?
厦门★passthru(448081936) 20:51:34
可能是大问题,
厦门★passthru(448081936) 20:53:11
出现cpf4203信息的都是比较严重的问题,牵涉到系统或硬件。
smallpotato(149884321) 20:56:14
Message ID . . . . . . . . . : CPF4203
Message file . . . . . . . . : QCPFMSG
Library . . . . . . . . . : QSYS
Message . . . . : Member &4 cannot be opened while UPDPROD(*NO).
Cause . . . . . : Member &4 file &2 in library &3 could not be opened
because either file &2 or a based-on file of file &2 is in a production
library and the file is being opened for either an update, delete or output
operation; however, the job that is opening the file is in debug mode with
the UPDPROD(*NO) parameter specified.
Recovery . . . : Either specify the INHWRT(*YES) parameter on the OVRDBF
command, or specify the UPDPROD(*YES) parameter on the CHGDBG command. Then
try your request again.
smallpotato(149884321) 20:56:37
参数改一下就好了吧。
UPDPROD(*YES)
厦门★passthru(448081936) 20:58:31
如果,做savef后restore,改这个参数有效。所以,我问“在这之前做了什么?”。如果不是这类东西引起的,问题就大了。
云风(48698398) 21:04:02
enddbg再试一下
Major(280059419) 21:18:02
ENDDBG了
Major(280059419) 21:18:32
之前OPEN这个文件然后关闭了啊
Major(280059419) 21:18:39
还是不行
Major(280059419) 21:18:56
UPDPROD(*YES) 在哪里修改啊
厦门★passthru(448081936) 21:28:14
strdbg F4 确认UPDPROD(*YES).如果rpg之前有用cl做ovrdbf,就要在ovrdbf时设置参数 INHWRT(*YES)。试试
Major(280059419) 21:28:34
OK 老大们现在OPEN没错了
Major(280059419) 21:28:55
就是吧那个UPDPROD(*YES)就OK;
福建★嘻嘻(11844279) 21:30:28
Major 你这个问题一开始就没把最重要的那点说出来 你在STRDBG的环境下
厦门★passthru(448081936) 21:32:06
呵呵,你们os还比较纯洁。如果系统文件被破坏,也会出现CPF4203。或硬盘出现坏点,也会CPF4203。
Major(280059419) 21:32:16
对。。。。
厦门★passthru(448081936) 21:33:34
嘻嘻的提示非常重要,要希望他人能够一步到位的帮助你,就要把问题发生的前提一起告诉。
Major(280059419) 21:35:03
是这样的我在写文件的时候%ERROR 结果DEG是就OPEN出错了
Major(280059419) 21:35:10
不好意思没说清楚
厦门★passthru(448081936) 21:37:07
为什么会“是这样的我在写文件的时候%ERROR 结果DEG是就OPEN出错了”?搞明白了吗?
Major(280059419) 21:37:54
哦我的意思是WRITE(E)时出错了
北京★天道酬勤(331728312) 21:40:15
WRITER+(E)=WRITE(E)这样系统给你提供%ERROR来错异常处理..
Major(280059419) 21:41:33
好我是一把就是WRITER(E) 文件名
IF %ERROE
END
厦门★passthru(448081936) 21:43:30
是ile的rpgiv吗?
厦门★passthru(448081936) 21:44:27
程序后缀是rpgle吗?
Major(280059419) 21:44:58
是RPGLE
厦门★passthru(448081936) 21:46:00
知道为什么会write出错后,用debug调试程序时,会报CPF4203吗?
厦门★passthru(448081936) 21:46:51
UPDPROD(*YES)参数这样设置又为了什么目的?
Major(280059419) 21:46:56
没有吧,那个UPDPROD(*YES)该来啊
厦门★passthru(448081936) 21:47:29
没有搞明白发生的原因。嘻嘻,知道吗?
Major(280059419) 21:47:30
不知。。。
Major(280059419) 21:47:35
恩德
Major(280059419) 21:48:46
那个updprod是做什么的啊
福建★嘻嘻(11844279) 21:48:54
我不能确定与否:库属性是 *prod 还是*test?
厦门★passthru(448081936) 21:49:33
这样的问题会在用到AG编程时,经常遇到。
福建★嘻嘻(11844279) 21:51:17
*PROD
This is a production library. Database files in
production libraries cannot be opened for updating if
a user is in debug mode and he requested that
production libraries be protected. A user can protect
all database files in production libraries by
specifying UPDPROD(*NO) on the Start Debug (STRDBG)
command to begin testing. However, this protection
福建★嘻嘻(11844279) 21:53:37
说说你的pass
福建★嘻嘻(11844279) 21:55:03
*PROD
这是产品库。若用户处于调试方式且已请求保护该产品库,则
不能为更新而打开产品库中的数据库文件。用户可通过在“启
动调试” (STRDBG) 命令上指定 UPDPROD(*NO) 以开始测试来
保护产品库中的所有数据库文件。但是,此保护不会防止程序
删除数据库文件或更改库中的其他对象(如数据区)。
厦门★passthru(448081936) 21:57:54
rpgle一般情况下,都是采用默认打开程序使用文件模式,即rpg程序一经调用,就打开文件。如果发生write错误,程序非正常结束,这时,文件就出在打开状态,特别是repgle这类资源是独占式,不会主动释放。这是用debug程序,程序又要在一次打开文件,就会发生“cannot be opened”。如果在程序非正常结束后,认为释放程序资源,我想,就不会发生CPF4203报错。
UPDPROD(*YES)就是允许同个文件多次被重复打开。我是这样理解的。
厦门★passthru(448081936) 21:58:47
RPGLE又是独占系统资源的,如果异常退出,需人为释放程序资源。
福建★嘻嘻(11844279) 21:59:44
*test 这是测试库。即使已为产品库请求特别保护,在测试期间,测试库中的所有对象可予以更新。
厦门★passthru(448081936) 22:01:32
嘻嘻说的,是根据库类别ibm才用的保护策略。对于400编程人员,我认为,应该如我以上所说的理解。
福建★嘻嘻(11844279) 22:04:32
那pass也要加上在*prod 类型的库下的file 的前提?
厦门★passthru(448081936) 22:04:43
我不建议动不动就UPDPROD(*YES),
厦门★passthru(448081936) 22:06:05
只要我上面的思路,就无需考虑lib是*test,还是*prod。
厦门★passthru(448081936) 22:10:23
嘻嘻,你认为这两种做法哪种较好些呢?
福建★嘻嘻(11844279) 22:12:22
大家基本用的库类型都是*prod
福建★嘻嘻(11844279) 22:12:59
我自己在STRDBG解决问题也确实是用UPDPROD(*YES)
厦门★passthru(448081936) 22:15:56
定型的生产lib都的。当然对生产库的程序修改是不允许在生产机上的,必须用备份机来做。但是,备份机上的调试程序,都是生产机上的备份,都是*prod。呵呵,问题就来了,如果多人同时并发调试程序,大家都在strdbg是用参数UPDPROD(*YES),就存在隐患。
阅读(1793) | 评论(0) | 转发(0) |