0

我目前正在研究四个 CL 和 RLG 程序。调用堆栈如下:A->B->C->D 其中 A 是顶部调用者 CL 程序,D 是底部调用者 RPG 程序。程序 A 在文件上有一个带有 SHARE(*YES) 选项的 OVRDBF 语句,该语句用作程序 D 中的输出。现在我面临一个问题,即每当 D 尝试将记录写入此文件时,错误消息 CPF5149 是抛出告诉我 I/O 操作无效。如果我在程序 A 中注释此 OVRDBF 语句,则 D 可以毫无问题地将记录写入文件。那么,为什么这个 OVRDBF 会导致 RPG 程序中的 I/O 出现问题呢?如何解决?删除它可能不是一种选择。

4

1 回答 1

3

保持数据路径打开的SHARE(*YES)选项。OVRDBF如果调用堆栈中打开文件的第一个程序以只读方式打开它,那么它将对所有其他程序保持这种状态。

通常SHARE(*YES)仅在您想在将OPNQRYF记录传递给另一个程序之前使用该命令过滤记录时使用。


更新:

您的示例中程序 B、C 和 D(以先打开文件为准)的打开属性将控制打开状态。

如果您使用OPNQRYF指定OPTION(*ALL)参数来强制它打开具有完整读/写/更新/删除属性的数据路径。


IBM i 信息中心:共享开放数据路径

于 2012-06-25T15:21:57.323 回答