READC の使い方について解説する。
ポイントは DSPFの SFLレコードに SFLNXTCHG キー・ワードを
指定することである。
(1) DSPF の SFL レコードに SFLNXTCHG キー・ワードを宣言する。
【例】
0041.00 A R SFREC01 SFL 0042.00 A TEXT(' SFLレコード ') 0043.00 A 20 0044.00 AO 99 SFLNXTCHG 0045.00 A GYO 4A B 9 2TEXT(' № ') 0046.00 A 03 DSPATR(UL) : :
(2) RPG で READC を使用する。
【例】
C DO *HIVAL C SETOFF 50 C*( 実行キー ) C N10 CANN23 READC SFREC01 50 C 50 LEAVE C EXSR CHECK C 99 UPDATE SFREC01 C ENDDO :
【解説】
DO *HIVAL – ENDDO で READC で変更レコードだけを読み取って
CHECK でチェックしてエラーがあれば( 99 ) SFL レコードを更新します。
99 SFLNXTCHG が指定されているのでエラー・レコードは
次回も必ず読取られます。
エラーが無くなれば READC の対象となるレコードもなくなります。
最初に READC で読取った SFL レコードを検査してエラーがあれば
標識 : *IN99 をオンにしてからエラーのあった SFL レコードを
UPDATE 命令で更新する。
標識 99 のときに SFLNXTCHG が指定されているので
エンド・ユーザーがエラー・メッセージを無視して何もせずに
実行キーを押したとしても SFLNXTCHG によってエラー SFL レコードは
再読み取りされるので再びチェックされてエラーが戻る。
もし SFLNXTCHG が指定されていなければ、初めは READC によって
エラーと判定された SFL レコードもエンド・ユーザーが
エラー行に対して何も処置せずに実行キーを押すと
次の READC 命令ではこのエラー SFL レコードは読取られることはないので
チェックでエラーが発生しなくなってしまう。
エラーがなければデータを更新するようにプログラムが作成されていても
エラーはないものと判定されてしまうのでエラー・レコードが
更新されてしまう問題が発生する可能性がある。
従って READC を使用するときの SFL レコードには
必ずエラー標識を条件とする SFLNXTCHG キー・ワードを指定しておく
必要がある。