在COBOL程序中获取重叠错误
Cobol程序:在COBOL程序中获取重叠错误,cobol,mainframe,zos,gnucobol,cics,Cobol,Mainframe,Zos,Gnucobol,Cics,Cobol程序: PROGRAM-ID. SCHPROG. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT MYFILE ASSIGN TO INDD ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL. DATA DIVIS
PROGRAM-ID. SCHPROG.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT MYFILE ASSIGN TO INDD
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD MYFILE.
01 FILERECORDS.
05 NAME PIC A(10).
05 CLASS-IN PIC 9(1).
05 ROLL PIC 9(5).
WORKING-STORAGE SECTION.
COPY SCHMAPA.
COPY SCHMAPB.
COPY SCHMAPC.
01 END-OF-FILE PIC A(3) VALUE 'NO'.
PROCEDURE DIVISION.
000-MAIN-PARA.
PERFORM 100-SEND-MAPA.
PERFORM 100-RECEIVE-MAPA.
IF CHOICEI = '1'
PERFORM 200-SEND-MAPB
PERFORM 200-RECEIVE-MAPB
PERFORM 200-SEND-MAPB
PERFORM 100-SEND-MAPA
END-IF.
IF CHOICEI = '2'
PERFORM 300-SEND-MAPC
PERFORM 300-RECEIVE-MAPC
PERFORM 500-SRCH-REC
PERFORM 300-SEND-MAPC
PERFORM 100-SEND-MAPA
END-IF.
STOP RUN.
100-SEND-MAPA.
EXEC CICS
SEND
MAP('SCHOLA') MAPSET('SCHMAPA')
ERASE
END-EXEC.
100-RECEIVE-MAPA.
EXEC CICS
RECEIVE
MAP('SCHOLA') MAPSET('SCHMAPA')
END-EXEC.
200-SEND-MAPB.
EXEC CICS
SEND
MAP('SCHOLB') MAPSET('SCHMAPB')
ERASE
END-EXEC.
200-RECEIVE-MAPB.
EXEC CICS
RECEIVE
MAP('SCHOLB') MAPSET('SCHMAPB')
END-EXEC.
PERFORM 400-FILE-PROCESS.
300-SEND-MAPC.
EXEC CICS
SEND
MAP('SCHOLC') MAPSET('SCHMAPC')
ERASE
END-EXEC.
300-RECEIVE-MAPC.
EXEC CICS
RECEIVE
MAP('SCHOLC') MAPSET('SCHMAPC')
END-EXEC.
400-FILE-PROCESS.
OPEN OUTPUT MYFILE.
MOVE NAMEI TO NAME.
MOVE CLASSI TO CLASS-IN.
MOVE ROLLI TO ROLL.
WRITE FILERECORDS.
CLOSE MYFILE.
MOVE 'RECORD INSERTED' TO MSGBO.
500-SRCH-REC.
OPEN INPUT MYFILE.
PERFORM UNTIL END-OF-FILE = 'YES'
READ MYFILE INTO FILERECORDS
AT END
MOVE 'YES' TO END-OF-FILE
NOT AT END
IF ROLL = ROLLCI
MOVE NAME TO NAMECO
MOVE CLASS-IN TO CLASSCO
END-IF
END-READ
END-PERFORM.
CLOSE MYFILE.
获取错误。
IGYPA3043-E Data-item "FILERECORDS (GROUP)" and record "FILERECORDS (GROUP)"
had overlapping storage. Movement of data may not occur at execution time.
我已经提供了我的cobol程序。请检查并帮助我找到问题
我正在更新来自Cics区域的文件,并使用相同的文件获取详细信息并放入Cics区域
我不知道为什么会出现这个错误。
早些时候,我使用相同的组数据项将记录添加到文件中,它工作正常。
请帮忙
将我的文件读入文件记录
是重复的,因为这些记录已相互分配。要解决这个问题,只需使用
readmyfile
(只有当您不想将文件记录放在FILERECORDS
,而是放在其他地方时,才会使用。类似于@simon的答案
READ
已将记录放入MYFILE
中的01定义中<当您希望将数据放置在工作存储
中的另一个区域时,使用code>读入
。对FD
区域执行读入
,只需将数据移动到自身上
我总是被教导对我在工作存储
中定义的或是文案
的一个区域进行读取,以将I/O区域与数据操作分开
在汇编程序中,您使用READ
执行的操作相当于GET-LOCATE
,而不是GET-MOVE
类型的操作。虽然其他答案正确回答了您的问题,但针对CICS的编译需要一些限制,这些限制在下面2021年4月6日被记录和引用。您可能还想咨询CICS的版本和发行版
限制:不能运行具有面向对象功能的COBOL程序
Java语法™ CICS中的互操作性。另外,如果你写
要在CICS下运行的程序,请不要使用以下代码:
- 环境部门中的文件控制条目,除非
文件控制项用于排序语句
- 文件部分
数据分割,除非文件部分用于排序语句
- 主程序的用户指定参数使用声明(除
用于调试)
- 这些COBOL语言语句:
- 接受格式1:
数据传输(您可以使用format-2 ACCEPT检索系统日期
(和时间)
- 接近
- 删除
- 在控制台上显示
- 在SYSPUNCH上显示
- 合并
- 打开
- 阅读
- 重播
- 重写
- 开始
- 停止文字
- 写
[……]
编码文件输入和输出:大多数输入和输出处理必须使用CICS命令。因此,不要描述文件或代码
任何打开、关闭、读取、启动、重写、写入或删除语句。
相反,使用CICS命令来检索、更新、插入和删除
数据
您能否共享更多的文件控制和工作存储定义?ROLLCI和NAMECO的定义在哪里?它们看起来像什么?更新了上面的完整程序。很好@cshneid