今天给同事调试程序,在检查完RPGLE语法和逻辑没有问题之后,进行CRTBNDRPG。
之后就出现了一个怪异的问题。
M e s s a g e S u m m a r y
Msg id Sv Number Message text
*RNF7031 00 1 The name or indicator is not referenced.
*RNF7055 30 1 Factor 1 is not valid for the specified operation.
按照提示7055进行跟踪(Find:7055,F16),结果发现问题出在这里:
Msg id Sv Number Seq Message text
*RNF7055 30 31 001700 Factor 1 *LOVAL is not valid for the specified operation
根据Seq再次定位到错误处,对应程序里面是这里:
0017.00 C *LOVAL SETLL STU_SCORE
刚开始,一头雾水,这里怎么会报*LOVAL无效呢?这不需要去定义啊?
困惑了许久,不得而知。
过一会,一位老员工回来了,其他同事都围绕着他问题呢!我也凑上去听听看看,过后自己去调试上午写的程序。
奇怪了,刚刚在同事程序里出现的问题,此刻我碰到了!
在他们激烈的讨论中,一位同事说:物理文件是通过键值去查找记录的。
此时才恍然大悟,我读取的物理文件里面有K值,而我的访问刚好使用到了K值,应该在F行的DISK前面加上一个K,修改如下:
0001.00 FSCORE UF E K DISK USROPN
加完后,编译及成功!
对于AS400上记录型文件里面的记录的查找,可以使用键值,而且一般记录型文件都有键字,类似数据库的索引。
所以在引用物理文件的时候要注意,键字的使用!
一切都是太粗心大意!切记,细心!