最初のページに戻ります。

総合の目次があるページに戻ります。

よく使うマニュアルです

Wiki

updated on 2004.06.23

12.8.Q.Aファイルを読んで、そのレコード中のライブラリー名によってCPYFする方法は?

[ Previous ] [ HOME ] [ Upper ] [ Next ]


1998/6/27

2つ方法があります。

  1. CLPでやってしまうもの。

  2. RPGでやってしまうもの。

CLPでやる場合

PGM                    
DCLF AFILE                    
\READ:                    
RCVF *N AFILER (AFILEのレコード様式名)
	MONMSG CPF0864 *N GOTO \END (CPF0864はEOF)     
CPYF &LIB/&FILE &TOLIB/&TOFILE FROMMBR(&MBR) +
              TOMBR(*FROMMBR) MBROPT(*REPLACE) ...
 ここで、モニターメッセージや、コピー元と、コピー先のレコード件数の一致検査をすること。RTVMBRD NBRCURRCDを使用。物理ファイルに対して行うこと。
    CALL UPDAFILE PARM(&KEY &OK)                    
AFILEを更新したりする、小さいプログラム。当然、レコードを識別できる、キーを与える
    GOTO \READ                    
\END:
RETURN
ENDPGM                    

尚、DCLFはCLP一個で、一回までしか定義できません。複数のファイル(物理/論理ファイル + 画面ファイルなど)は不可です。また、ファイルのフィールドはDCLFで取り込まれます。画面ファイルと同じです。

また、AFILEの操作は、別に小さなRPGで対応します。AFILEはユニークキーでないとだめですね。

RPGを使う場合

  1. 外部サブルーチンとして、CPYF用の情報をパラメータで受け取り、CPYFするCLPを作成する。

  2. ファイルを読み込んで、CAT命令や、データ構造で、CPYFのコマンドストリングを作り、RPGの中で、QCMDEXCで実行する。エラーの時に、CALLのエラー標識がonになります※。

※Julian Monypennyさん(News400 1997年2月)

... but I strongly recommend you avoid using prototypes with APIs such as QSNDDTAQ (Send Data Queue) and QCMDEXC. These APIs don't return the standard API error structure on failure. The only way to trap errors with these APIs is to use the error resulting indicator on a CALL operation.

参考

4.1.4 コピー・エラーの監視(AS/400 アドバンスト・シリーズ データ管理 バージョン 3 資料番号 SC88-5494-00)

種々のエラー状態を示すのに、エスケープ・メッセージ CPF2817 が送られます。このメッセージが送られたときは、コピー元ファイル・メンバーが空の場合(これについては後述します)を除き、次の事態が生じています。

  • (CRTFILE(*YES) がコピー・コマンドで指定されているが)物理ファイルが作成されていません。
  • メンバーが物理ファイルであるコピー先ファイルに追加されていません。
  • (MBROPT(*REPLACE) が指定されているが)コピー先ファイル・メンバーが消去されていません。
  • コピー先ファイルがオープンされていないので、ディスケット・ボリュームまたはテープ・ボリューム上にファイルが作成されません。コピー先ファイルがスプール・ファイルの場合は、スプール・ファイルが作成されません。
  • レコードがコピーされていません。

CPF2817 エスケープ・メッセージには、特定のエラー状態を示す診断メッセージが、少なくとも 1 つは必ず先行します。CPF2817 エスケープ・メッセージの直前の先行診断メッセージのメッセージ識別コードは、CPF2817 エスケープ・メッセージのメッセージ置換えデータ(SNDPGMMSG コマンドの MSGDTA パラメーター)として使用されます。したがって、MONMSG コマンドの CMPDTA パラメーターを使用することによって、CPF2817 エスケープ・メッセージから特定のエラーを監視することができます。

 

[ Previous ] [ HOME ] [ Upper ] [ Next ]

You are at K's tips-n-kicks of AS/400

 

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送