当想要更新到 RPGLE 中的 SUBFILE 时,如何在没有事先输入的情况下遇到错误 UPDATE 和 DELETE

How to encounter error UPDATE and DELETE without prior input WHEN want to update to SUBFILE in RPGLE

我遇到了如下图所示的错误:

如果我输入空白选项或错误选项,我将得到如上的错误

出现此错误时,我无法更新、删除和刷新。

当我想更新现有记录时,以及当我输入错误的选项和空白选项时,都会发生这种情况。当我调试时,我意识到当想要更新子文件时会出现错误。

OSR     Begsr
        ReadC    SFL01
        DOW      *IN91 = *OFF
        
        Select
OPT     WhenEQ    2
        Exsr      UPDSR
OPT     WhenEQ    4
        Exsr      DLTSR             
OPT     WhenEQ    5
        Exsr      DSPSR
        Other
        Exsr      ERRSR
        EndSL

        Clear            OPT

        UPDATE    SFL01
        READC     SFL01

        Enddo
        Endsr

我该怎么办?在 UPDATE SUBFILE 之前是否需要从逻辑文件链接? 请帮我。提前致谢

您应该将错误显示为文本,而不是在图片中包含 link。

还要给出错误 ID,CPFxxxx 不只是描述。

该消息非常不言自明,您可以在二级消息文本中找到更多详细信息。 (如果是活动作业,请在消息上按 F1,如果作业已结束,请查看作业日志。)

您的 UPDSR 或 DLTSR 正在执行 UPDATE 或 DELETE 操作码,而没有首先通过 CHAIN 读取记录。

指标*in91必须指定为READC语句的EQ结果指标。两个 READC 语句。或者,用内置 %eof 变量的测试替换 *in91 的测试。

c     OSR           Begsr                                               
c                   ReadC     SFL01                                  91 
c                   DOW       *IN91 = *OFF                              
** ------------------------- osr_eof -----------------------
c     OSR_eof       Begsr                                   
c                   ReadC     SFL01                         
c                   DOW       %eof = '0'                    
                                                            
c                   Select                                  
c     OPT           WhenEQ    2                           
c                   Exsr      UPDSR                         
c     OPT           WhenEQ    4                           
c                   Exsr      DLTSR                         
c     OPT           WhenEQ    5                           
c                   Exsr      DSPSR                         
c                   Other                                   
c                   Exsr      ERRSR                         
c                   EndSL                                   
                                                            
c                   Clear                   optn            
                                                            
c                   UPDATE    SFL01                         
c                   READC     SFL01                         
                                                            
c                   Enddo