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 してフィールドのリストを読み取っている。