見出し画像

エクセル小技:IBMiからSQLでデータ取得するマクロ

かなり以前に、投げ捨て型SQLのサンプルを作りましたが、今回はデータ取得のサンプルです。
最低限のコードサンプルになってますので、エラー処理やら項目編集やらSQL編集やらは、適当に改造して下さい。

サンプルコード

は、QGPL/QAUOOPT の内容をエクセルシートに1項目ずつ貼り付けています。
SQLを元にレコードセット作ったら、レコード読んで項目単位の処理をする感じです。
繋げるまでが面倒ですけど、ほぼお約束なので、SQL文を渡してレコードセットを返すようなサブルーチンを用意しておくのが良いかと思います。

Sub Reference_SQL()
    
    'セル設定
    Cur_Row = ActiveCell.Row
    Cur_Col = ActiveCell.Column - 1

    'ODBC接続
    Set L_ADOcon = CreateObject("ADODB.Connection")
    L_ADOcon.ConnectionString = "DRIVER=IBM i Access ODBC Driver;SYSTEM=192.168.0.1;UID=QSECOFR;PWD=QSECOFR;TRANSLATE=1"
    L_ADOcon.Open
    'レコードセット作成
    Set L_RecordSet = CreateObject("ADODB.Recordset")
    L_RecordSet.CursorType = 0  'adOpenForwardOnly
    L_RecordSet.LockType = 1    'adLockReadOnly
    L_RecordSet.Open "select * from QGPL.QAUOOPT", L_ADOcon, , , &H1 'adCmdText

    'カラムテキスト
    For i = 1 To (L_RecordSet.Fields.Count)
        Cells(Cur_Row, Cur_Col + i) = Trim(L_RecordSet(i - 1).Name)
    Next
    'データセット
    Do While (Not L_RecordSet.EOF)
        Cur_Row = Cur_Row + 1
        '↓↓↓ ここいら辺に、一行ずつの処理を入れる。
        For i = 1 To (L_RecordSet.Fields.Count)
            Cells(Cur_Row, Cur_Col + i) = Trim(L_RecordSet(i - 1))
        Next
        '↑↑↑ ここいら辺に入れる。
        L_RecordSet.MoveNext
    Loop

    '接続解除
    L_RecordSet.Close
    Set L_RecordSet = Nothing
    L_ADOcon.Close
    Set L_ADOcon = Nothing

End Sub

参考にしたサイト

IBM i Access ODBC - 接続ストリング・キーワード
https://www.ibm.com/docs/ja/i/7.5?topic=details-connection-string-keywords

投げ捨て型SQLサンプルはこちら






いいなと思ったら応援しよう!