免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2408 | 回复: 0
打印 上一主题 下一主题

OPNQRYF, OPNSCOP, SHARE问题探讨 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-27 13:41 |只看该作者 |倒序浏览
我在项目中遇到了以下问题,希望大家来探讨一下。

相关程序如下:
PTEST:

0001.00              PGM                        
0002.00              CALL       PGM(P111)     
0003.00              ENDPGM                              

P111:

0002.00              PGM                                                        
0018.00              DCL        VAR(&QRYSTR) TYPE(*CHAR) LEN(60) VALUE('   ')   
0018.01              DCL        VAR(&I) TYPE(*DEC) VALUE('1')                  
0018.02               CHGVAR     VAR(&QRYSTR) VALUE('111')                       
0057.00 NEXTLP: OVRDBF     FILE(FILE1)  SHARE(*YES) +                     
0058.00                           OVRSCOPE(*CALLLVL)                           
0061.00              OPNQRYF    FILE((FILE1)) OPTION(*INP *UPD) +               
0062.00                           QRYSLT('XCO *EQ %VALUES(' *CAT +              
0063.00                           &QRYSTR *CAT ')') KEYFLD(*FILE) +            
0064.00                           MAPFLD((F1  F2  *ZONED 3) (F2 +               
0065.00                           F1  *DEC 3)) OPNSCOPE(*JOB)                  
0066.00              CHGVAR     VAR(&QRYSTR) VALUE('   ')                       
0140.00              CALL       PGM(RPG01)                                      
0145.00              CLOF       OPNID(FILE1)                                    
0146.00              DLTOVR     FILE(FILE1) LVL(*)                              
0146.01              RCLRSC                                                     
0146.02              RCLACTGRP  ACTGRP(ATG0001)                                 
0146.03                                                                        
0146.04              MONMSG     MSGID(CPF1653)                                 
0146.05              CHGVAR     VAR(&QRYSTR) VALUE('222')                       
0146.03                                                                  
0146.04              MONMSG     MSGID(CPF1653)                           
0146.05              CHGVAR     VAR(&QRYSTR) VALUE('222')                 
0146.06              CHGVAR     VAR(&I) VALUE(&I + 1)                     
0146.07              IF         COND(&I *LT 3)  THEN(DO)                  
0146.08              GOTO       NEXTLP                                    
0146.09              ENDDO                                                
0205.00              ENDPGM                                       
        

RPG01:

0001.00 FFILE1    UP   E           K DISK                                                
0003.00 C                   CALL      'RPG02'                                          
0004.00 C                   EVAL      *INLR ='1'               

RPG02:

0001.00 FFILE1    IF     E           K DISK                                 
0002.00 DVAR1             S             6         
0002.01 DVAR2             S             6                       
0003.00 C                                                                  
0004.00 C                   EVAL      VAR1 = '111111'                  
0005.00 C     VAR1          CHAIN     FILE1                             30
0006.00 C                   IF        *IN30 = '0'                           
0007.00 C                   EVAL      VAR2 = VAR1                           
0008.00 C                   ENDIF                                          
0009.00 C                   RETURN                                         

CALL PTEST, 在执行P111的第二个LOOP时报“Shared open not allowed for query.  ” 错。
而把rpg02改成如下代码时没这个错:
RPG02:

0001.00 FFILE1    IF     E           K DISK                                 
0002.00 DVAR1             S             6         
0002.01 DVAR2             S             6                       
0003.00 C                                          
0005.00 C                   IF        NOT(%OPEN(FILE1))     
0006.00 C                   OPEN      FILE1                 
0007.00 C                   ENDIF                                                   
0004.00 C                   EVAL      VAR1 = '111111'                  
0005.00 C     VAR1          CHAIN     FILE1                             30
0006.00 C                   IF        *IN30 = '0'                           
0007.00 C                   EVAL      VAR2 = VAR1                           
0008.00 C                   ENDIF                           
0012.00 C                   IF        %OPEN(FILE1)   
0013.00 C                   CLOSE     FILE1           
0014.00 C                   ENDIF                                    
0009.00 C                   RETURN                                         

这是有关OPNSCOP(*JOB), SHARE(*YES), 在RPG02中用到了OPNQRYF打开的文件,却没有显著式的关闭,引起了报错,尽管我找到了几种解决的方法,就是在上面的一种,还有就是在OVRDBF时指定到其他文件,如FILE2,或在RPG02中用FILE1的逻辑文件而非直接用FILE1.但我还是不明白其中的真正原因,请大家来探讨一下。

程序代码可能不是很好,请见谅!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP