3

这是我的情况:我的程序 A 如下所示:

Fmfile IF EK 磁盘 USROPN
d grue 喜欢(dhseqn)
d
C *条目清单
C PARM 格鲁
c 打开mfile
c*** 用 grue 做某事
c 关闭mfile
c eval *inlr = *on

dhseqn 是一个 2,0 S 字段。

编译清单向我展示了这一点:

*RNF7031 DHSEQN P(2,0) 000200 1000002D
          格鲁 P(2,0) 000200D 000500M 000700 000800M
                            基于(_QRNL_PRM+)

当我使用已声明为 2,0 S 的参数调用程序 A 时,出现十进制数据错误。

这是预期的,还是编译器错误?

4

2 回答 2

5

RPG 编译器(甚至在 ILE 之前)将数据库字段转换为打包的。有时您会发现它不会,例如,如果您在数据结构中使用分区文件字段将保持分区,但您不使用的同一文件的每个分区字段都会被打包。

如果您确实需要从文件字段中点赞,请定义一个虚拟数据结构以保持分区。

更好的是,如果你的入口参数没有被修改,在程序的原型中使用 Const 关键字定义它,类型将自动转换,甚至接受表达式和常量!

这是一篇关于在过程原型和自动转换上使用 Const的非常好的文章。

于 2010-06-11T20:31:24.530 回答
0

grue 定义中的“s”不是指数据类型,而是将其定义为“独立”字段。grue 的数据类型指定为 LIKE(dhseqn),您的编译列表显示为 P(2,0)。

于 2010-07-01T13:06:55.523 回答