我正试图在一个程序上工作,并使用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程序,使其在没有输入时不会出错