OPNQRYF和Open选项被共享打开忽略



我正试图在一个程序上工作,并使用OPNQRYF命令,以便我只获得某些记录。我总是在RPG程序中得到十进制数据错误,就像它没有任何数据或其他东西一样。所以,我只做了基本的,这样我就可以添加到程序中了。

所以我创建了下面这个简单的CL:
PGM        PARM(&PSICU)                           

DCL        VAR(&PSICU      ) TYPE(*CHAR) LEN(   8)
DCL        VAR(&RECS) TYPE(*DEC) LEN(10 0)        

OVRDBF     FILE(F0312) NBRRCDS(111) SHARE(*YES)   
OPNQRYF    FILE((F0312)) OPTION(*INP *UPD) FORMAT(*FILE) OPTIMIZE(*ALLIO) +          
OPNID(*FILE) SEQONLY(*NO) TYPE(*PERM) KEYFLD((RUICUT) (RUICU) (RUDOCM) (RUAN8)) +  
QRYSLT('(RUICU *EQ ' *CAT &PSICU *CAT ') & (RUPOST *EQ " ")')  
CPYFRMQRYF FROMOPNID(F0312) TOFILE(QTEMP/F0312) MBROPT(*ADD) CRTFILE(*YES) FMTOPT(*NOCHK)
RTVMBRD    FILE(QTEMP/F0312) NBRCURRCD(&RECS)             
IF         COND(&RECS *EQ 0) THEN(GOTO CMDLBL(EOJ))        

CALL       PGM(SMITHMIS/TSTOPNQRYR) PARM(&PSICU)  
EOJ:                                                   
DLTF       FILE(QTEMP/F0312)                    
CLOF       OPNID(F0312)                         
MONMSG     MSGID(CPF0000 CPC0000 CPD0000)       
DLTOVR     FILE(F0312)                          
MONMSG     MSGID(CPF0000 CPC0000 CPD0000)       
ENDPGM                                            

查看我的工作日志,OPNQRYF正在获得2条记录(这是正确的)

RPG是这样简单的:

FF0312   IF  E                    DISK                
FQSYSPRT O   F     132     OF     PRINTER             
C           *ENTRY    PLIST                           
C                     PARM           PSICU   8        
C*                                                    
C                     MOVELPSICU     @NM              
C                     CALL 'X0012'                    
C*                    ---- -------                    
C                     PARM           @NM    22        
C                     PARM           #NUMR  156       
C                     Z-ADD#NUMR     $WRK8   80       
C                     Z-ADD$WRK8     PSICU#  80       
C*                                                    
C           *INLR     DOWEQ'0'                        
C                     READ I0312                  99LR
C*                                                    
C*                                                    
C*    If negative document, make it positive          
C*                                                    
C           RUDOC     IFLT *ZERO                      
C                     MULT -1        RUDOC            
C                     ENDIF                           
C*                                                    
C           RUDOCM    IFLT *ZERO                      
C                     MULT -1        RUDOCM           
C                     ENDIF                           
C*                                            
C*    Determine if record should be processed.
C*                                            
C           *IN99     IFEQ '0'                
C           *INLR     ANDEQ'0'                
C           RUPOST    CABEQ'A'       END      
C*                    -----          ---      
C                     ENDIF                   
C*                                            
C           RUICU     IFNE PSICU#              
C                     GOTO END                 
C                     ENDIF                    
C*                                             
C           *INLR     CABEQ'1'       END       
C*                    -----          ---       
C                     ADD  1         CNT     50
C                     EXCPTDETL                
C           END       TAG                      
C                     ENDDO                
OQSYSPRT E      2         DETL             
O                         CNT   Z    5     

当它到达RPG时,那里什么都没有。当我查看作业日志时,我看到:

Member F0312 file F0312 in D81QUADTA opened.                         
900 - CPYFRMQRYF FROMOPNID(F0312) TOFILE(QTEMP/F0312) MBROPT(*ADD)
CRTFILE(*YES) FMTOPT(*NOCHK)                                       
Physical file F0312 created in library QTEMP.                        
Member F0312 added to file F0312 in QTEMP.                           
2 records copied from member F0312.                                  
1000 - RTVMBRD FILE(QTEMP/F0312) NBRCURRCD(&RECS)                  
1300 - CALL PGM(SMITHMIS/TSTOPNQRYR)          /* The CALL command  
contains parameters */                                             
Open options ignored for shared open of member F0312.                

知道为什么它忽略了我的OPNQRYF吗?

您的程序没有忽略查询文件,它没有得到任何记录,因为在CPYFRMQRYF命令之后,开放访问路径位于文件的末尾。选项忽略消息意味着文件已经通过输入和更新(由OPNQRYF)打开,并且由于打开是共享的,因此RPG程序无法打开它,只能输入

所以你要么

  • 关闭并重新打开查询文件
  • 关闭查询文件,使用qtemp文件作为输入。
  • 去掉CPYFRMQRYF并更改RPG程序,使其在没有输入时不会出错

最新更新