QUSLFLD はデータ・ベースのフィールド構成の一覧を表示するための API である。
フィールドの一覧を取得したい場面は数多く発生するはずであるが
そのようなときには QUSLFLD でフィールド・リストをいきなり出力することはできない。
先に紹介した QUSLRCD によってレコード様式名を検索してからレコード様式名を使って
QUSLFLD で初めてフィールドの一覧を出力することになる。
フィールドの一覧は結果をユーザー・スペースに出力されるので
QUSLFLD を実行する前には QUSCRTUS によって事前にユーザー・スペースを
QTEMP などに作成しておく必要がある。
必須パラメータ・グループ:
| 1. | 修飾ユーザー・スペース名 | 入力 | Char(20) |
| 2. | 形式名 | 入力 | Char(8) |
| 3. | 修飾ファイル名 | 入力 | Char(20) |
| 4. | レコード様式名 | 入力 | Char(10)の配列(*) |
| 5. | 一時変更処理 | 入力 | Char(1) |
任意選択パラメータ:
| 6. | エラー・コード | 入出力 | Char(*) |
QUSLFLD は次の目的で使用することができる。
QUERY のようなアプリケーションを作成する。DFU のようなアプリケーションを作成する。修飾ユーザー・スペース名
ユーザー・スペース名 + ライブラリー名 を指定する
形式名
FLDL0100 フィールド情報
修飾ファイル名
ファイル名 + ライブラリー名
レコード様式名
入力 CHAR(10)
一時変更処理
'0' 一時変更なしを指定すること
■ FLDL0100 形式
| オフセット | タイプ | フィールド | |
|---|---|---|---|
| 10進数 | 16進数 | ||
0 | 0 | CHAR(10) | フィールド名 |
10 | A | CHAR(1) | データ・タイプ |
11 | B | CHAR(1) | 使用状況 |
12 | C | BINARY(4) | 出力バッファー位置 |
16 | 10 | BINARY(4) | 入力バッファー位置 |
20 | 14 | BINARY(4) | フィールドの長さ(バイト数) |
24 | 18 | BINARY(4) | 桁数 |
28 | 1C | BINARY(4) | 小数点以下の桁数 |
32 | 20 | CHAR(50) | フィールド・テキストの記述 |
82 | 52 | CHAR(2) | 編集コード |
84 | 54 | BINARY(4) | 編集語の長さ |
88 | 58 | CHAR(64) | 編集語 |
152 | 98 | CHAR(20) | 列見出し 1 |
172 | AC | CHAR(20) | 列見出し 2 |
192 | C0 | CHAR(20) | 列見出し 3 |
212 | D4 | CHAR(10) | 内部フィールド名 |
222 | DE | CHAR(30) | 代替フィールド名 |
252 | FC | BINARY(4) | 代替フィールドの長さ |
256 | 100 | BINARY(4) | DBCS 文字の数 |
260 | 104 | CHAR(1) | 許容された NULL値の数 |
261 | 105 | CHAR(1) | 変数フィールド標識 |
262 | 106 | CHAR(4) | 日時形式 |
266 | 10A | CHAR(1) | 日時区切り記号 |
267 | 10B | CHAR(1) | 可変長さフィールド標識 |
268 | 10C | BINARY(4) | フィールド・テキストの記述 CCSID |
272 | 110 | BINARY(4) | フィールド・データ CCSID |
276 | 114 | BINARY(4) | フィールド列見出し CCSID |
280 | 118 | BINARY(4) | フィールド編集語 CCSID |
284 | 11C | BINARY(4) | UCS-2 表示フィールド長 |
これはデータ・ベース QTRFIL/SHOHIN のフィールド一覧を検索するプログラムである。
0001.00 H DFTNAME(QUSLFLD) DATEDIT(*YMD/)
0002.00 F******** QUSLFLD: フィールド一覧のテスト *****************************
0003.00 F*
0004.00 F*****************************************************************
0005.00 /COPY QSYSINC/QRPGLESRC,QUS
0006.00 /COPY QSYSINC/QRPGLESRC,QUSLFLD
0007.00
0008.00 D FILFILLIB S 20A INZ('SHOHIN QTRFIL ')
0009.00
0010.00 D APIERR DS
0011.00 D GETBYT 1 4B 0 INZ(160)
0012.00 D AVLBYT 5 8B 0 INZ(0)
0013.00 D MSGID 9 15
0014.00 D MSGDTA 17 160
0015.00
0016.00 D USRSPC DS
0017.00 D USNAME 10A INZ('QUSLFLD ')
0018.00 D USLIB 10A INZ('QTEMP ')
0019.00
0020.00 D MSGFFLIB DS
0021.00 D MSGF 10A INZ('QCPFMSG ')
0022.00 D MSGFLIB 10A INZ('QSYS ')
0023.00
0024.00 D HEDSTR DS 256
0025.00 D OFFSET 1 4B 0
0026.00 D NOENTR 9 12B 0
0027.00 D LSTSIZ 13 16B 0
0028.00
0029.00 D SPCBIN DS
0030.00 D INZSIZ 10I 0 INZ(1000)
0031.00 D MSGDTALEN 10I 0 INZ(100)
0032.00 D PGMSTKCNT 10I 0 INZ(1)
0033.00 D STRPOS 10I 0
0034.00 D LENDTA 10I 0
0035.00 D N 4S 0
0036.00
0037.00 C*(1) QUSCRTUS: ユーザー・スペースの作成
0038.00 C*----------------------------------------------------+
0039.00 C CALL 'QUSCRTUS'
0040.00 C PARM USRSPC
0041.00 C PARM 'PF ' EXATTR 10
0042.00 C PARM INZSIZ
0043.00 C PARM ' ' INZCHR 1
0044.00 C PARM '*ALL ' AUT 10
0045.00 C PARM TEXT 50
0046.00 C PARM '*YES ' REPLACE 10
0047.00 C PARM APIERR
0048.00 C*----------------------------------------------------+
0049.00 C AVLBYT CABNE *ZEROS SNDERR
0050.00
0051.00 C*(2) QUSLFLD: フィールド一覧
0052.00 C*----------------------------------------------------+
0053.00 C CALL QUSLFLD
0054.00 C PARM USRSPC
0055.00 C PARM 'FLDL0100' FOTMAT 8
0056.00 C PARM FILFILLIB
0057.00 C PARM 'SHOHINR ' RECORD 10
0058.00 C PARM '0' TEMP 1
0059.00 C PARM APIERR
0060.00 C*----------------------------------------------------+
0061.00 C AVLBYT CABNE *ZEROS SNDERR
0062.00
0063.00 C*(3) QUSRTVUS : ヘッダー構造の読み取り
0064.00 C*----------------------------------------------------+
0065.00 C CALL 'QUSRTVUS'
0066.00 C PARM USRSPC
0067.00 C PARM 125 STRPOS |
0068.00 C PARM 16 LENDTA |
0069.00 C PARM HEDSTR
0070.00 C PARM APIERR
0071.00 C*----------------------------------------------------+
072.00 C AVLBYT CABNE *ZEROS SNDERR
073.00
074.00 C*(4) QUSRTVUS : リスト・セクションの読み取り
075.00 C* HEADER によって OFFSET,LSTSIZ を受取った
076.00 C Z-ADD OFFSET STRPOS
077.00 C ADD 1 STRPOS
078.00 C Z-ADD LSTSIZ LENDTA
079.00 C* リスト・サイズの分だけ LOOP して検索
080.00 C 1 DO NOENTR N N=1-NOENTR
081.00 C*----------------------------------------------------+
082.00 C CALL 'QUSRTVUS' 99 |
083.00 C PARM USRSPC |
084.00 C PARM STRPOS |
085.00 C PARM LENDTA |
086.00 C PARM QUSL0100 |
087.00 C*----------------------------------------------------+
088.00 C* ------( 処理の開始 - ここから )------
089.00 C 'FLD=' CAT(P) QUSFN02:0 DSP40 40
090.00 C DSP40 DSPLY
091.00 C* ------( 処理の終了 - ここまで )------
092.00 C ADD LENDTA STRPOS
093.00 C END N=1-NOENTR
094.00
095.00 C MOVE *ON *INLR
0096.00 C '** END **' DSPLY ANS 1
0097.00 C RETURN
0098.00 C SNDERR TAG
0099.00 C GETBYT SUB 15 MSGDTALEN
0100.00 C*----------------------------------------------------+
0101.00 C CALL(E) 'QMHSNDPM'
0102.00 C PARM MSGID |
0103.00 C PARM MSGFFLIB |
0104.00 C PARM MSGDTA |
0105.00 C PARM MSGDTALEN |
0106.00 C PARM '*ESCAPE ' MSGTYPE 10 |
0107.00 C PARM '* ' PGMQUE 10 |
0108.00 C PARM PGMSTKCNT |
0109.00 C PARM ' ' MSGKEY 4 |
0110.00 C PARM APIERR
0111.00 C*----------------------------------------------------+
0112.00 C MOVE *ON *INLR
0113.00 C RETURN
CRTBNDRPG PGM(MYLIB/QUSLFLD) SRCFILE(MYSRCLOIB/QRPGLESRC) AUT(*ALL)
最初に準備としてユーザー・スペース: QTEMP/QUSLFLD を
0037.00 C*(1) QUSCRTUS: ユーザー・スペースの作成 0038.00 C*----------------------------------------------------+ 0039.00 C CALL 'QUSCRTUS' 0040.00 C PARM USRSPC 0041.00 C PARM 'PF ' EXATTR 10 0042.00 C PARM INZSIZ 0043.00 C PARM ' ' INZCHR 1 0044.00 C PARM '*ALL ' AUT 10 0045.00 C PARM TEXT 50 0046.00 C PARM '*YES ' REPLACE 10 0047.00 C PARM APIERR 0048.00 C*----------------------------------------------------+
によって作成しておいてから
0051.00 C*(2) QUSLFLD: フィールド一覧 0052.00 C*----------------------------------------------------+ 0053.00 C CALL QUSLFLD 0054.00 C PARM USRSPC 0055.00 C PARM 'FLDL0100' FOTMAT 8 0056.00 C PARM FILFILLIB 0057.00 C PARM 'SHOHINR ' RECORD 10 0058.00 C PARM '0' TEMP 1 0059.00 C PARM APIERR 0060.00 C*----------------------------------------------------+
によって QTRFIL/SHOHIN のフィールド一覧をユーザー・スペース: QTEMP/QUSLFLD に出力する。
次に
0063.00 C*(3) QUSRTVUS : ヘッダー構造の読み取り 0064.00 C*----------------------------------------------------+ 0065.00 C CALL 'QUSRTVUS' 0066.00 C PARM USRSPC 0067.00 C PARM 125 STRPOS | 0068.00 C PARM 16 LENDTA | 0069.00 C PARM HEDSTR 0070.00 C PARM APIERR 0071.00 C*----------------------------------------------------+
によって開始オフセット OFFSET と一項目の長さ LSTSIZ を読み取って
079.00 C* リスト・サイズの分だけ LOOP して検索
080.00 C 1 DO NOENTR N N=1-NOENTR
081.00 C*----------------------------------------------------+
082.00 C CALL 'QUSRTVUS' 99 |
083.00 C PARM USRSPC |
084.00 C PARM STRPOS |
085.00 C PARM LENDTA |
086.00 C PARM QUSL0100 |
087.00 C*----------------------------------------------------+
088.00 C* ------( 処理の開始 - ここから )------
:
:
091.00 C* ------( 処理の終了 - ここまで )------
092.00 C ADD LENDTA STRPOS
093.00 C END
によって LOOP してフィールドのリストを読み取っている。