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