AS400 cpyf不复制字符记录

时间:2014-07-07 04:16:31

标签: file command ibm-midrange

我正在尝试使用CPYF命令将数据文件(STUDMARKS)中的所有记录复制到我的物理文件(MARKS)中。

 A          R MARKSR                    TEXT('Marks Records')
 A            STUDENTID      9S 0       COLHDG('Student' 'ID')
 A            COURSE_CD      6A         COLHDG('Course' 'Code')
 A            FINAL_MARK     3S         COLHDG('Final' 'Mark')
 A            DATERUN         L         COLHDG('Date' 'Run')
 A          K STUDENTID
 A          K COURSE_CD 

这是我目前在MARKS.pf中所拥有的。 STUDMARKS.pf-dta文件已经定义了前三个记录,DATERUN记录填写了使用日期。

CPYF FROMFILE(IBC233LIB/STUDMARKS) TOFILE(DS233B32/MARKS) MBROPT(*REPLACE) FMTOPT(*MAP *DROP)

以上是我在创建MARKS.pf之后运行的CPYF命令,在执行RUNQRY以查看所有记录之后我注意到除了COURSE_CD之外的所有记录都已填充。 COURSE_CD完全空白。

我事先做了一些研究,并对两个成员做了一个DSPFFD,以确保记录长度和类型都是相同的,它们就是这样。但是,我注意到,在STUDMARKS.pf-dta中,所有记录的缓冲区长度都等于字段长度。 MARKS.pf中的STUDENTID字段是唯一不共享此属性的字段,字段长度为9,但缓冲区长度仅为5.我不确定这是否是我遇到这种困难的原因,这个问题几乎肯定不如我正在制作的那样,但我已经在这一段时间了,并且似乎无法将记录从一个成员复制到另一个成员。

令人难以置信的沮丧,非常感谢帮助


我为两个文件拍摄了DSPFFD命令的屏幕截图

对于STUDMARKS Screen Shot of DSPFFD StudMarks

对于MARKS enter image description here

EDIT   刚刚看到拼写错误!把我的头撞在桌子上,但我几乎可以保证这是问题所在。你的所有答案都非常有用,也很有帮助,所以非常感谢你

EDITEDIT 对于其他人,尽管我在重新编译程序时确实更改了名称,但除非先删除文件然后编译它,否则它将无法工作。非常令人沮丧,但这就是它的原因......

所以DLTF [file name]然后重新编译

3 个答案:

答案 0 :(得分:1)

正如詹姆斯所指出的,STUDENTID缓冲区长度的差异是由于一个文件定义为打包而另一个文件定义为分区。

这对CPYF无关紧要,因为两者都是兼容的数字,CPYF会在你看到它们之间进行映射。

但是,这证明两个文件之间不仅仅有一个缺少的字段。使用DSPFFD并查看从两个文件中发布COURSE_ID的定义。

我敢打赌,名字不同或类型都是。

答案 1 :(得分:0)

您遇到的是打包和有符号十进制字段之间的区别。

您很可能忘记在STUDENTID文件中的MARKS字段的DDS规范的第35位指定数据类型。

例如:

A            STUDENTID      9S 0       COLHDG('Student' 'ID')   

           Data        Field  Buffer    Buffer        Field    Column  
Field      Type       Length  Length  Position        Usage    Heading 
STUDENTID  ZONED        9  0       9         1        Both     Student 
                                                               ID

A            STUDENTID      9  0       COLHDG('Student' 'ID')   

           Data        Field  Buffer    Buffer        Field    Column  
Field      Type       Length  Length  Position        Usage    Heading 
STUDENTID  ZONED        9  0       5         1        Both     Student 
                                                               ID

A            STUDENTID      9P 0       COLHDG('Student' 'ID')   

           Data        Field  Buffer    Buffer        Field    Column  
Field      Type       Length  Length  Position        Usage    Heading 
STUDENTID  PACKED       9  0       5         1        Both     Student 
                                                               ID

有关此行为的说明,请参阅Data type for physical and logical files (position 35)部分中的DDS参考:

  

对于物理文件,如果未在引用字段中指定数据类型或重复数据类型,操作系统将分配以下默认值:

     
      
  • 如果小数位36到37为空白,则为(字符)。
  •   
  • P(压缩十进制),如果小数位36到37包含0到63范围内的数字。
  •   

由于数据类型不同,FMTOPT(*MAP *DROP)告诉CPYF命令静默丢弃并默认任何不匹配的字段。

奇怪的是文件字段描述将字段标记为ZONED,当它真的被PACKED时。

答案 2 :(得分:0)

FMTOPT参数的* DROP值排除了两个文件中没有相同属性和相对位置的命名字段。 COURSE_CD字段在接收文件中具有不同的位置。