В настоящее время я работаю над четырьмя программами CL и RLG. Стек вызовов выглядит следующим образом: A-> B-> C-> D, где A - это программа CL верхнего вызывающего абонента, а D - программа RPG нижнего вызываемого абонента. В программе A есть оператор OVRDBF с параметром SHARE (* YES) для файла, который используется в качестве вывода в программе D. Теперь я столкнулся с проблемой, заключающейся в том, что всякий раз, когда D пытается записать запись в этот файл, появляется сообщение об ошибке CPF5149. брошенный, говоря мне, что операция ввода-вывода недействительна. Если я прокомментирую этот оператор OVRDBF в программе A, тогда D сможет без проблем записать запись в файл. Так почему именно этот OVRDBF вызывает проблемы с вводом-выводом в программе RPG? Как это решить? Удаление его может быть не вариант.
При каких обстоятельствах OVRDBF будет вызывать сообщение об ошибке CPF5149?
Ответы (1)
Параметр SHARE(*YES)
для OVRDBF
сохраняет путь к данным открытым. Если первая программа в стеке вызовов, открывающая файл, открывает его как доступный только для чтения, то он останется таким же для всех других программ.
Обычно SHARE(*YES)
используется только тогда, когда вы хотите использовать OPNQRYF
< / a> команда для фильтрации записей перед их передачей в другую программу.
ОБНОВЛЕНИЕ:
Открытые атрибуты программ B, C и D (в зависимости от того, какая из них откроет файл первой) в вашем примере будут управлять статусом открытия.
Если вы используете OPNQRYF
, укажите параметр OPTION(*ALL)
, чтобы заставить его открыть путь к данным с полными атрибутами чтения / записи / обновления / удаления.
Информационный центр IBM i: совместное использование пути открытых данных
F
или OPNF / OPNQRYF в первой программе в стеке вызовов, чтобы открыть файл.
- person James Allman; 25.06.2012
OPNDBF ... OPTION(*ALL)
. Просто не забудьте использовать CLOF
в конце вашего CL, чтобы закрыть ODP. Или не используйте SHARE(*YES)
, если в этом нет необходимости.
- person James Allman; 25.06.2012