[AS/400]DSPFD情報表示スクリプト

概要

本番も近くなると『このLF、キーなんだっけ?』とドキュメントを開く時間も無くなります。
で、DSPFD でキーフィールド名調べて、PF のソース見て項目名確認したりします。
のが、面倒なので、まとめてやってくれるスクリプトを作りました。
ライブラリも、面倒なのでライブラリリスト指定で一番上を見に行きます。

良い子のお約束

このページに書かれている事を実行して、何が起こっても私は知りません。
まぁ、このページに到達された方なら大丈夫でしょうけど(^o^)。

環境とか

使い方

スクリプト re974001.hta の固定値をご自分の環境に合わせて変更し、そのディレクトリに UDB_Dic というディレクトリを作ってから、スクリプトを起動して下さい。
左上には調べたいファイル名、縦長のテキストボックスには調べたいライブラリリストを指定して下さい。
DSPFDとDSPFFDを実行して、結果をそれっぽく表示します。
UDB_Dic ディレクトリには、項目名情報テキストを格納します。『項目名再取得』のチェックを入れると作り直します。
『オブジェクト情報』のチェックを入れるとDSPOBJDの結果もそれっぽく表示します。
DDS名の4桁表示は、おまけです。まぁ、適当にソースいじって下さい。
iSeries Access とか Client Access は、自力でインストールして下さい。

スクリプトのソース

[re974001.hta:ここから]======================================================================
<html>
<head>
    <HTA:APPLICATION
        APPLICATIONNAME="AS/400 DSPFD表示"
        ICON="wiaacmgr.exe" 
    />
    <style type="text/css">
    <!--
        body,select,input,td,textarea   {
            font-family         : monospace;
            font-size           : 100%;
        }
        h1  {
            margin-top          : 0.5em;
            padding-top         : 0.2em;
            padding-bottom      : 0.2em;
            margin-bottom       : 0.2em;
            padding-left        : 1 em; 
            color               : #3333ff;
            background-color    : #99ffff;
            font-size           : 130%;
        }
        table.soto_waku {
            margin-left         : 1 em; 
            border-style        : solid none none solid ;   
            border-width        : 0pix ;    
        }
        table.naka_waku {
            margin-left         : 1em;
            border-style        : solid none none solid ;   
            border-width        : 1pix ;    
        }
        td.naka_waku    {
            margin-top          : 0em;
            margin-bottom       : 0em;
            text-align          : center;
            border-style        : none solid solid none ;   
            border-width        : 1pix ;    
        }
        textarea.cmd_list   {
            font-family         : monospace;
        }
        input.text  {
            width               : 8em;  
        }
        input.button    {
            font-size           : 80%;
        }
        span.UL {
            text-decoration     : underline;
        }
    -->
    </style>

</head>
<body onload="S_onload_proc()" onkeyup="S_Keyup_on_body()">
<form id="form_main" onsubmit="">
<h1 id="page_title"></h1>
<table class="soto_waku" ><tr>
    <td class="soto_waku" valign="top">
        <input class="text" name="Target_file" accesskey="f" value="TOKMASL"/>
        <br>
        <input class="button" name="Execute" type="button" onclick="S_AS_commands_check()" value="(F10)表示"/>
        <br>
        <textarea class="cmd_list" id="Target_libl" rows="14" cols="10">
QTEMP  
DTALIB1
DTALIB2
QGPL   </textarea>
        <br>
        <select name="connect_AS" size="1" accesskey="a" >
            <option value="192.168.100.100" selected>自社</option>
            <option value="192.168.100.110" >客先</option>
        </select>
        <br>
        <input class="text" name="connect_user" accesskey="u" />
        <br>
        <input class="text" name="connect_pass" accesskey="w" type="password" />
        <br>
        <input id="Special_Font" type="checkbox" onclick="S_Click_Special_Font()" checked><label for="Special_Font">特殊フォント</label>
        <br>
        <input id="Reget_field_name" type="checkbox"  ><label for="Reget_field_name">項目名再取得</label>
        <br>
        <input id="DSPOBJD" type="checkbox" ><label for="DSPOBJD">オブジェクト情報</label>
    </td>
    <td class="soto_waku" valign="top">
        基本情報
        <table id="BASE" title="基本情報(BASATR・MBR)" class="naka_waku" cellspacing="0"></table>
        並び順
        <table id="ACCPTH" title="並び順(ACCPTH)" class="naka_waku" cellspacing="0"></table>
        選択条件
        <table id="SELECT" title="選択条件(SELECT)" class="naka_waku" cellspacing="0"></table>
        オブジェクト情報
        <table id="OBJECT" title="オブジェクト情報(DSPOBJD)" class="naka_waku" cellspacing="0"></table>
    </td>
</tr></table>

</form>

<script language="VBScript">
    option explicit

    Const C_title_text = "AS/400 DSPFD表示 V1.1"
    Const C_initial_width = 630
    Const C_initial_height = 580

    Const C_DFT_AS_SYSTEM   = "192.168.100.100"
    Const C_DFT_AS_UID      = "USERID"
    Const C_DFT_AS_PWD      = "PASSWORD"

    Const C_FD_outfile_lib  = "QGPL"        'DSPFD の OUTFILE 格納ライブラリ。QTEMP 不可。
    Const C_FD_BASATR_file  = "FD_BASATR"   'DSPFD の OUTFILE 格納ファイル名:BASATR
    Const C_FD_MBR_file     = "FD_MBR"      'DSPFD の OUTFILE 格納ファイル名:MBR
    Const C_FD_ACCPTH_file  = "FD_ACCPTH"   'DSPFD の OUTFILE 格納ファイル名:ACCPTH
    Const C_FD_SELECT_file  = "FD_SELECT"   'DSPFD の OUTFILE 格納ファイル名:SELECT
    Const C_OBJD_file       = "DSPOBJDOUT"  'DSPOBJD の OUTFILE 格納ファイル名
    Const CA_BASATR_Fields  = "ATFILE,ATLIB,ATFTYP,ATTXT"           'BASATR から必要な項目を並べる。
    Const CA_MBR_Fields     = "MBBOF,MBBOL,MBNRCD,MBBOLF"           'MBR から必要な項目を並べる。
    Const CA_ACCPTH_Fields  = "APKEYN,APKEYF,APKSEQ"                'ACCPTH から必要な項目を並べる。
    Const CA_SELECT_Fields  = "SORULE,SOFLD,SOCOMP,SOVALU"          'SELECT から必要な項目を並べる。
    Const CA_OBJD_Fields    = "ODCDAT,ODCTIM,ODSRCD,ODSRCT,ODSRCL,ODSRCF,ODSRCM"    'OBJDOUT から必要な項目を並べる。
    Const CA_BASATR_title   = "ファイル,ライブラリ,タイプ,テキスト" 'BASATR から必要な項目を並べる。
    Const CA_MBR_title      = "物理ファイル,ライブラリ,件数,レコード様式名"     'MBR から必要な項目を並べる。
    Const CA_ACCPTH_title   = ",項目,A/D"                          'ACCPTH から必要な項目を並べる。
    Const CA_SELECT_title   = "選択除外,項目,比較,値"              'SELECT から必要な項目を並べる。
    Const CA_OBJD_title     = "ファイル作成日,ファイル作成時刻,ソース変更日,ソース変更時刻,ソースライブラリ,ソースファイル,ソースメンバー"    'OBJDOUT から必要な項目を並べる。

    Const C_Dic_path        = "UDB_Dic\"    'fdf 格納ディレクトリ。スクリプトのあるディレクトリの中に作ってね。末尾には \ を。
    Const C_Dic_ext         = ".txt"        'fdf 定義ファイル拡張子。dds名、項目名のタブ区切りテキストです。
    Const C_ffd_outfile_name = "DSPFFDOUT"

    Const C_Normal_Font     = "monospace"
    Const C_Special_Font    = "エミュレータフォント:ゴシック,monospace"

    dim G_AS400,G_AS_CMD
    dim G_Target_file

    dim L_ADO_con
    dim rt,i
    dim LA_commands()
    dim LA_Libl()
    dim L_constr

'--------------------------------------------------------------------------------
'『表示』ボタン押下時の処理
Sub S_AS_commands_check()

    Err.Clear
    G_Target_file = trim(document.all("Target_file").value)

    if G_Target_file = "" then
        S_OK_msg "ファイル名を指定して下さい。"
        exit sub
    end if

    'AS/400接続
    Call S_AS_connect()
    If Err.Number <> 0 Then exit sub
    'ライブラリリスト設定&DSPFDOUT
    Call S_AS_cmd_execute()
    If Err.Number <> 0 Then exit sub

end sub
'--------------------------------------------------------------------------------
'ライブラリリスト設定&DSPFDOUT
sub S_AS_cmd_execute()
    dim L_Libl_str
    dim LA_temp_Libl,L_temp_Lib
    dim L_cmd_str
    dim L_ADO_con,L_RS
    dim L_SQL_str
    dim L_cur_row,L_cell_data
    dim L_ATFTYP,L_PF_name,L_PF_lib
    dim L_column_dic
    dim LA_temp_fields
    dim L_temp_text

'   On Error Resume Next

    '結果テーブルの初期化
    '1行目はタイトル行なので、削除しません。
    For i = (document.all("ACCPTH").rows.length - 1) to 1 Step  - 1
        document.all("ACCPTH").deleteRow(i)
    Next
    For i = (document.all("SELECT").rows.length - 1) to 1 Step  - 1
        document.all("SELECT").deleteRow(i)
    Next
    'オブジェクト情報テーブルは取り合えず、全行消します。
    For i = (document.all("OBJECT").rows.length - 1) to 0 Step  - 1
        document.all("OBJECT").deleteRow(i)
    Next
    'で、表示する必要があるなら、用意しときます。
    if document.all("DSPOBJD").checked  then 
        'オブジェクト情報テーブル
        Call S_Initialize_2retsu_table(CA_OBJD_Fields,CA_OBJD_title,"OBJECT")
    end if

    err.clear

    '初期ライブラリリストの設定
    if document.all("Target_libl").value <> "" then
        L_Libl_str = ""
        'オブジェクト名配列の作成:LA_objects
        LA_temp_Libl = Split(document.all("Target_libl").value,vbcrlf)
        for i = 0 to UBound(LA_temp_Libl)   'それぞれのメンバー毎の処理
            L_temp_Lib = trim(LA_temp_Libl(i))
            if ( ( L_temp_Lib <> "" ) and ( left(L_temp_Lib,1) <> "#" ) ) then
                L_Libl_str = L_Libl_str & " " & L_temp_Lib
            end if
        next
        '実際のライブラリリストの変更
        if L_Libl_str <> "" then 
            L_cmd_str = "CHGLIBL (" & L_Libl_str & ")"
            G_AS_CMD.run L_cmd_str
            If Err.Number <> 0 Then
                Call S_Err_msg(L_cmd_str)   '結果メッセージの表示
                Exit sub
            end if
        end if
    end if

    'ADOによるレコードセットに対する処理
    Set L_ADO_con = F_Set_ADO_con()
    Set L_RS = CreateObject("ADODB.Recordset")
    L_RS.CursorType = 0     'adOpenForwardOnly
    L_RS.LockType = 1       'adLockReadOnly

    'BASATR項目の表示
    Call S_Display_2retsu_table(L_ADO_con,L_RS,"BASATR",C_FD_BASATR_file,CA_BASATR_Fields)
    If Err.Number <> 0 Then exit sub
    '後で使う項目を取っときます。
    L_ATFTYP    = L_RS.fields.item("ATFTYP")
    L_PF_name   = trim(L_RS.fields.item("ATFILE"))
    L_PF_lib    = trim(L_RS.fields.item("ATLIB"))
    L_RS.Close

    'MBR項目の表示
    Call S_Display_2retsu_table(L_ADO_con,L_RS,"MBR",C_FD_MBR_file,CA_MBR_Fields)
    If Err.Number <> 0 Then exit sub
    '後で使う項目を取っときます。
    if trim(L_RS.fields.item("MBBOF")) <> "" then L_PF_name = trim(L_RS.fields.item("MBBOF"))
    if trim(L_RS.fields.item("MBBOL")) <> "" then L_PF_lib = trim(L_RS.fields.item("MBBOL"))
    L_RS.Close

    'L_PF_name を元に、ディクショナリ作成
    Set L_column_dic = F_create_column_dic(L_PF_name,L_PF_lib)      'DDS名変換ディクショナリ定義

    'ACCPTHテーブル
    Call S_Display_Ichiran_table(L_ADO_con,L_RS,L_column_dic,"ACCPTH","APKEYF",CA_ACCPTH_Fields,C_FD_ACCPTH_file)
    If Err.Number <> 0 Then exit sub

    'SELECTテーブル
    if L_ATFTYP <> "P" then
        Call S_Display_Ichiran_table(L_ADO_con,L_RS,L_column_dic,"SELECT","SOFLD",CA_SELECT_Fields,C_FD_SELECT_file)
        If Err.Number <> 0 Then exit sub
    end if

    'DSPOBJD項目の表示
    if document.all("DSPOBJD").checked  then 
        'オブジェクト情報テーブル
        Call S_Display_2retsu_table(L_ADO_con,L_RS,"OBJECT",C_OBJD_file,CA_OBJD_Fields)
        If Err.Number <> 0 Then exit sub
        L_RS.Close
        'mmddyy → yymmdd
        L_temp_text = document.all("ODCDAT").innerHTML
        document.all("ODCDAT").innerHTML = right(L_temp_text,2) & "/" & left(L_temp_text,2) & "/" & mid(L_temp_text,3,2)
        L_temp_text = document.all("ODCTIM").innerHTML
        document.all("ODCTIM").innerHTML = left(L_temp_text,2) & ":" & mid(L_temp_text,3,2) & ":" & right(L_temp_text,2)
        L_temp_text = document.all("ODSRCD").innerHTML
        document.all("ODSRCD").innerHTML = left(L_temp_text,2) & "/" & mid(L_temp_text,3,2) & "/" & right(L_temp_text,2)
        L_temp_text = document.all("ODSRCT").innerHTML
        document.all("ODSRCT").innerHTML = left(L_temp_text,2) & ":" & mid(L_temp_text,3,2) & ":" & right(L_temp_text,2)

    '   msgbox document.all("ODCDAT").innerHTML
    end if


    L_ADO_con.close
    Set L_column_dic = nothing
    Set L_ADO_con = nothing

    On Error Goto 0

end sub
'--------------------------------------------------------------------------------
'2列表示型のテーブル表示(BASATR・MBR
sub S_Display_2retsu_table(P_ADO_con,P_RS,P_Table_id,P_FD_file,PA_Fields)

    dim L_cmd_str
    dim L_SQL_str
    dim LA_temp_fields,L_temp_text

    'DSPFD−BASATR
    if P_Table_id = "OBJECT" then
        L_cmd_str = "DSPOBJD " & G_Target_file & " *FILE OUTPUT(*OUTFILE) "
    else
        L_cmd_str = "DSPFD " & G_Target_file & " *" & P_Table_id & " *OUTFILE "
    end if
    L_cmd_str = L_cmd_str & "OUTFILE(" & C_FD_outfile_lib & "/" & P_FD_file & ")"
    G_AS_CMD.run L_cmd_str
    If Err.Number <> 0 Then
        Call S_Err_msg(L_cmd_str)   '結果メッセージの表示
        Exit sub
    end if

    'BASATR
    L_SQL_str = "Select " & PA_Fields & " from " & C_FD_outfile_lib & "." & P_FD_file
    P_RS.Open L_SQL_str,P_ADO_con,,,&H0001  'adCmdText 
    If Err.Number <> 0 Then
        Call S_Err_msg(L_SQL_str)   '結果メッセージの表示
        exit sub
    end if

    'テーブル項目の表示
    LA_temp_fields = Split(PA_Fields,",")
    For i = 0 to UBound(LA_temp_fields) 'それぞれのメンバー毎の処理
        L_temp_text = trim(P_RS.fields.item(LA_temp_fields(i)))
        if L_temp_text = "" then L_temp_text = "-"
        document.all(LA_temp_fields(i)).innerText = L_temp_text
    next

    'レコードセットの項目を使ったりするので、クローズは外でやります。

end sub
'--------------------------------------------------------------------------------
'一覧表示型のテーブル表示(ACCPTH・SELECT
sub S_Display_Ichiran_table(P_ADO_con,P_RS,P_column_dic,P_TABLE_id,P_Key_field,PA_Fields,P_FD_file)

    dim L_cmd_str
    dim L_SQL_str
    dim L_cur_row,L_cell_data

    'DSPFDコマンド実行
    L_cmd_str = "DSPFD " & G_Target_file & " *" & P_TABLE_id & " *OUTFILE "
    L_cmd_str = L_cmd_str & "OUTFILE(" & C_FD_outfile_lib & "/" & P_FD_file & ")"
    G_AS_CMD.run L_cmd_str
    If Err.Number <> 0 Then
        Call S_Err_msg(L_cmd_str)   '結果メッセージの表示
        Exit sub
    end if

    'SQL文を元に、一覧表示
    L_SQL_str = "Select " & PA_Fields & " from " & C_FD_outfile_lib & "." & P_FD_file
    P_RS.Open L_SQL_str,P_ADO_con,,,&H0001  'adCmdText 
    If Err.Number <> 0 Then
        Call S_Err_msg(L_SQL_str)   '結果メッセージの表示
        exit sub
    end if
    Do While ( Not P_RS.EOF )
        'DDS名配列・属性配列・値配列です。
        rt = document.all(P_TABLE_id).insertRow()
        L_cur_row = document.all(P_TABLE_id).rows.length - 1
        For i = 0 To (P_RS.Fields.Count -1) Step 1
            rt = document.all(P_TABLE_id).rows(L_cur_row).insertcell()
            document.all(P_TABLE_id).rows(L_cur_row).cells(i).classname = "naka_waku"
            '項目表示
            L_cell_data = trim(P_RS(i))
            if L_cell_data = "" then L_cell_data = "-"
            document.all(P_TABLE_id).rows(L_cur_row).cells(i).innerHTML = L_cell_data
        Next
        '項目名
        rt = document.all(P_TABLE_id).rows(L_cur_row).insertcell()
        document.all(P_TABLE_id).rows(L_cur_row).cells(P_RS.Fields.Count).classname = "naka_waku"
        document.all(P_TABLE_id).rows(L_cur_row).cells(P_RS.Fields.Count).innerHTML = P_column_dic.item(trim(P_RS.fields.item(P_Key_field)))
        '末尾4桁
        rt = document.all(P_TABLE_id).rows(L_cur_row).insertcell()
        document.all(P_TABLE_id).rows(L_cur_row).cells(P_RS.Fields.Count+1).classname = "naka_waku"
        document.all(P_TABLE_id).rows(L_cur_row).cells(P_RS.Fields.Count+1).innerHTML = right(trim(P_RS.fields.item(P_Key_field)),4)
        P_RS.MoveNext
    Loop
    P_RS.Close

end sub
'--------------------------------------------------------------------------------
'AS/400接続
sub S_AS_connect()

    Set G_AS400 = createobject("cwbx.AS400System")
    G_AS400.define document.all("connect_AS").value
    G_AS400.UserID  = document.all("connect_user").value
    G_AS400.Password    = document.all("connect_pass").value

    Set G_AS_CMD = createobject("cwbx.Command")
    Set G_AS_CMD.system = G_AS400

end sub
'--------------------------------------------------------------------------------
' Bodyでのキーアップイベント → F10 で実行
sub S_Keyup_on_body()

    'F10
    if window.event.keyCode = 121 then document.all("Execute").onclick

end sub
'--------------------------------------------------------------------------------
sub S_onload_proc()
    dim LA_temp_fields,LA_temp_title
    dim L_cur_row

    '初期値設定
    document.title = C_title_text
    document.all.page_title.innerText = C_title_text
    rt = window.resizeTo(C_initial_width,C_initial_height)

    document.all("connect_AS").value = C_DFT_AS_SYSTEM
    document.all("connect_user").value = C_DFT_AS_UID
    document.all("connect_pass").value = C_DFT_AS_PWD
    'フォント初期設定
    Call  S_Click_Special_Font()

    'テーブル初期配置
    '基本情報テーブル
    Call S_Initialize_2retsu_table(CA_BASATR_Fields,CA_BASATR_title,"BASE")
    'メンバー情報テーブル
    Call S_Initialize_2retsu_table(CA_MBR_Fields,CA_MBR_title,"BASE")
    '並び順情報テーブル
    Call S_Initialize_Ichiran_table(CA_ACCPTH_title,"ACCPTH")
    '選択条件情報テーブル
    Call S_Initialize_Ichiran_table(CA_SELECT_title,"SELECT")
    'オブジェクト情報テーブル
    if document.all("DSPOBJD").checked  then 
        Call S_Initialize_2retsu_table(CA_OBJD_Fields,CA_OBJD_title,"OBJECT")
    end if

end sub
'--------------------------------------------------------------------------------
'一覧表示型のテーブル初期表示(BASATR・MBR
sub S_Initialize_2retsu_table(PA_Fields,PA_title,P_Table_id)

    dim LA_temp_fields,LA_temp_title
    dim L_cur_row

    LA_temp_fields = Split(PA_Fields,",")
    LA_temp_title = Split(PA_title,",")
    For i = 0 to UBound(LA_temp_fields) 'それぞれのメンバー毎の処理
        '行追加
        rt = document.all(P_Table_id).insertRow()
        L_cur_row = document.all(P_Table_id).rows.length - 1
        'タイトルセル追加
        rt = document.all(P_Table_id).rows(L_cur_row).insertcell()
        document.all(P_Table_id).rows(L_cur_row).cells(0).classname = "naka_waku"
        document.all(P_Table_id).rows(L_cur_row).cells(0).innerHTML = LA_temp_title(i)
        '値セル追加
        rt = document.all(P_Table_id).rows(L_cur_row).insertcell()
        document.all(P_Table_id).rows(L_cur_row).cells(1).classname = "naka_waku"
        document.all(P_Table_id).rows(L_cur_row).cells(1).id        = LA_temp_fields(i)
        document.all(P_Table_id).rows(L_cur_row).cells(1).innerHTML = LA_temp_fields(i)
    next

end sub
'--------------------------------------------------------------------------------
'一覧表示型のテーブル初期表示(ACCPTH・SELECT
sub S_Initialize_Ichiran_table(PA_title,P_TABLE_id)

    dim LA_temp_title

    '並び順情報テーブル
    LA_temp_title = Split(PA_title,",")
    '行追加
    rt = document.all(P_TABLE_id).insertRow()       '1行目
    For i = 0 to UBound(LA_temp_title)  'それぞれのメンバー毎の処理
        'タイトルセル追加
        rt = document.all(P_TABLE_id).rows(0).insertcell()
        document.all(P_TABLE_id).rows(0).cells(i).classname = "naka_waku"
        document.all(P_TABLE_id).rows(0).cells(i).innerHTML = LA_temp_title(i)
    next
    rt = document.all(P_TABLE_id).rows(0).insertcell()
    document.all(P_TABLE_id).rows(0).cells(i).classname = "naka_waku"
    document.all(P_TABLE_id).rows(0).cells(i).innerHTML = "テキスト"
    rt = document.all(P_TABLE_id).rows(0).insertcell()
    document.all(P_TABLE_id).rows(0).cells(i+1).classname = "naka_waku"
    document.all(P_TABLE_id).rows(0).cells(i+1).innerHTML = "4桁"

end sub
'--------------------------------------------------------------------------------
Sub S_Click_Special_Font()
    'フォント指定変更時の処理
    dim L_selectorText

    for i = 0 to document.styleSheets(0).rules.length - 1
        L_selectorText = document.styleSheets(0).rules(i).selectorText
        if L_selectorText = "BODY" or L_selectorText = "INPUT" or L_selectorText = "SELECT" or L_selectorText = "TD"  or L_selectorText = "TEXTAREA" then
            if document.all("Special_Font").checked  then 
                document.styleSheets(0).rules(i).style.fontFamily = C_Special_Font
            else
                document.styleSheets(0).rules(i).style.fontFamily = C_Normal_Font
            end if
        end if
    next

end sub
'--------------------------------------------------------------------------------
sub S_OK_msg(P_msg)
    msgbox P_msg,0,C_title_text
end sub
'--------------------------------------------------------------------------------
sub S_Err_msg(P_msg)
    msgbox P_msg & vbcrlf & Err.Description,0,C_title_text
end sub
'--------------------------------------------------------------------------------
Sub S_create_ffdf(P_PF_Name,P_PF_lib,P_ffd_file_path,P_dic)
    '項目名定義ファイルの作成
    dim L_cmd_str,L_SQL_str
    dim L_ADO_con,L_RS
    dim L_fso,L_write_file

    'DSPFFDのOUTFILE出力 dspffd &L/&N *outfile outfile(qgpl/dspffdout)
    L_cmd_str = "DSPFFD " & P_PF_lib & "/" & P_PF_Name & " *OUTFILE OUTFILE(" & C_FD_outfile_lib & "/" & C_ffd_outfile_name &  ")"
    G_AS_CMD.run L_cmd_str
    If Err.Number <> 0 Then
        Call S_Err_msg(L_cmd_str)   '結果メッセージの表示
        Exit sub
    end if

    'ADOによるレコードセットに対する処理
    Set L_ADO_con = F_Set_ADO_con()
    Set L_RS = CreateObject("ADODB.Recordset")
    L_RS.CursorType = 0     'adOpenForwardOnly
    L_RS.LockType = 1       'adLockReadOnly

    'SQL文を元に、テキストファイル作成
    L_SQL_str = "Select WHFLDI,WHFTXT from " & C_FD_outfile_lib & "." & C_ffd_outfile_name
    L_RS.Open L_SQL_str,L_ADO_con,,,&H0001  'adCmdText 
    If Err.Number <> 0 Then
        Call S_Err_msg(L_SQL_str)   '結果メッセージの表示
        exit sub
    end if

    Set L_fso = CreateObject("Scripting.FileSystemObject")
    Set L_write_file = L_fso.OpenTextFile(P_ffd_file_path,2,true)
    Do While ( Not L_RS.EOF )
        L_write_file.WriteLine trim(L_RS.fields.item("WHFLDI")) & vbtab & trim(L_RS.fields.item("WHFTXT"))
        P_dic.add trim(L_RS.fields.item("WHFLDI")),trim(L_RS.fields.item("WHFTXT"))
        L_RS.MoveNext
    Loop
    L_write_file.Close
    Set L_fso = nothing

    L_RS.Close
    Set L_RS = nothing
    Set L_ADO_con = nothing

end sub
'--------------------------------------------------------------------------------
Function F_Set_ADO_con()
    'ADO接続定義の作成
    dim L_Con_Str

    ' ODBC for AS/400
    L_Con_Str   = "DRIVER=Client Access ODBC Driver (32-bit);"
    L_Con_Str   = L_Con_Str & " SYSTEM=" & document.all("connect_AS").value & ";"
    L_Con_Str   = L_Con_Str & " UID=" & document.all("connect_user").value & ";"
    L_Con_Str   = L_Con_Str & " PWD=" & document.all("connect_pass").value & ";"
    L_Con_Str   = L_Con_Str & " SIGNON=" & document.all("connect_user").value & ";"

    On Error Resume Next
    Set F_Set_ADO_con = CreateObject("ADODB.Connection")
    F_Set_ADO_con.ConnectionString = L_Con_Str
    F_Set_ADO_con.ConnectionTimeout = 20
    F_Set_ADO_con.Open
    If Err.Number <> 0 Then
        Call S_Err_msg(L_Con_Str)   '結果メッセージの表示
    end if
    On Error Goto 0

end Function

'--------------------------------------------------------------------------------
Function F_create_column_dic(P_PF_Name,P_PF_lib)
    'ファイル名をもらって、カラム名ディクショナリオブジェクトを作ります。
    dim L_ffd_file_path
    dim LA_temp_array
    dim L_dic
    dim L_fso,L_file
    dim test

    '項目名定義ファイルパスの編集
    L_ffd_file_path = left(document.location.pathname,InStrRev(document.location.pathname,"\")) & C_Dic_path & P_PF_Name & C_Dic_ext

    Set L_fso = CreateObject("Scripting.FileSystemObject")
    Set L_dic = CreateObject("Scripting.Dictionary")

    if (Not L_fso.FileExists(L_ffd_file_path) ) or document.all("Reget_field_name").checked then 
        'ディクショナリは参照渡しで帰ってきます。
        CAll S_create_ffdf(P_PF_Name,P_PF_lib,L_ffd_file_path,L_dic)
    else
        'ディクショナリ元ファイルが存在します。
        Set L_file = L_fso.OpenTextFile(L_ffd_file_path,1)
        Do While L_file.AtEndOfLine <> True
            LA_temp_array = split(L_file.ReadLine,vbtab)
            L_dic.add LA_temp_array(0),LA_temp_array(1)
        Loop
        L_file.Close
        set L_file = nothing
    end if

    set F_create_column_dic = L_dic
    set L_dic = nothing
    set L_fso = nothing

end Function
'--------------------------------------------------------------------------------

</script>
</body></html>
[re974001.hta:ここまで]======================================================================