あるデータ・ベースがどのライブラリーにあるかを、どのようにして調べればよいだろうか ?
よくある手法では CHKOBJ コマンドや API: QUSROBJD を使用することを思いつくかも知れないが
いずれも *LIBL つまりライブラリー・リスト上のライブラリーにある場合でしか
検索することができない。
そこで任意のデータ・ベースがどのライブラリーに保管されているかを一瞬のうちに
調べてくれるツールを紹介しよう。
この検索ツールは、探すデータ・ベース(*FILE) が、ライブラリー・リストにない場合でも
調べることができる。
原理的には簡単であるが、覚えておけば効果的な手法であることは間違いない。
原理は データ・ベース : QSYS/QADBXREF を参照すればよいだけである。
相互参照ファイル: QSYS/QADBXREF は System i のユーザーが System i 上でいろいろな
ライブラリーを作成したりファイルを作成したり、移動したりしても確実に OS によって
保守されてるデータ・ベースである。
ファイルとライブラリーの関連が OS400 によって単なる物理ファイルとして意外であるかも
知れないが QADBXREF は知っておくと重宝するデータ・ベースである。
QADBXREF は ライブラリー + データ・ベース名 をキー・フィールドとするデータ・ベースであって
次のようにデータが並んでいる。
QADBXREF のキー・フィールドは
ライブラリー名 + ファイル名
であり逆の
ファイル名 + ライブラリー名
をキー・フィールドとするのが QADBXREF に従属する論理ファイルのひとつである「 QADBXFIL 」である。
例えば SHOHIN という名前のファイルがライブラリー TESTFIL と QTRFIL の両方に存在していたとすると
QADBXFIL には、
SHOHIN QTRFIL SHOHIN TESTFIL
というように並んで存在しているはずである。
そこで QADBXFIL に CHAIN または SETLL & READE の処理を行えば簡単にライブラリー名を取り出すことが
できるようになる。
単なるキーつきの物理ファイルのレコードを探すだけであるから、これほど簡単なことはないだろう。
---------------------------------------------------------------------------------
0001.00 H DATEDIT(*YMD/) COPYRIGHT('(C) OfficeQuattro Co,.Ltd Japan 2011-')
0002.00 F********** データ・ベースのライブラリー検索 *************************
0003.00 FQADBXFIL IF E K DISK
0004.00 F**********************************************************************
0005.00 D FILE S 10A
0006.00 D FILE_P S *
0007.00 D FILLIB S 10A
0008.00 D FILLIB_P S *
0009.00 C*----------------------------------------------------+
0010.00 C *ENTRY PLIST
0011.00 C PARM FILE
0012.00 C PARM FILLIB
0013.00 C*----------------------------------------------------+
0014.00 C*
0015.00 C*----------------------------------------------------+
0016.00 C SETKEY KLIST
0017.00 C KFLD DBXFIL
0018.00 C KFLD DBXLIB
0019.00 C*----------------------------------------------------+
0020.00 C MOVEL(P) FILE DBXFIL
0021.00 C MOVE *LOVAL DBXLIB
0022.00 C SETKEY SETLL QADBXFIL
0023.00 C SETOFF 50
0024.00 C DBXFIL READE QADBXFIL 50
0025.00 C *IN50 IFEQ *ON
0026.00 C MOVEL(P) '*LIBL ' FILLIB
0027.00 C ELSE
0028.00 C DBXLIB IFEQ 'BACKUP '
0029.00 C DBXFIL READE QADBXFIL 50
0030.00 C END
0031.00 C MOVEL(P) DBXLIB FILLIB
0032.00 C END
0033.00 C SETON LR
0034.00 C RETURN
---------------------------------------------------------------------------------
解説も不要なくらい簡単なソースである。
パラメータ : FILE にファイル名を与えるとパラメータ : FILLIB にライブラリー名が戻される。
OS が壊れない限り実行時において QADBXFIL が見つからないということはない。
RTVDBLIB は便利で約に立つプログラムであるので、ぜひ活用して頂きたい。