DB2 for i を利用するには様々な方法があります。以前の記事でご紹介したように、MS-QueryやiNavi、あるいは一般的なSQLツールで簡単に利用できます。
とはいえ、業務で定型的にデータベース操作を行うにはSQLプログラムを作成するのが通例でしょう。この記事ではVBScriptでお手軽にDB2 for i を利用する簡単な例をご紹介します。
.
ご存知の方も多いと思いますが、VBScript(以下VBSと略称)はWindowsで利用可能なスクリプト言語です。
VBSはスクリプト言語なのでコンパイル不要で簡単に利用できますし、OLE(ActiveX)の操作を得意とし、ExcelやAccessと連携も可能ですのでいろいろと応用が利くと思います。Access for WindowsはODBC(基本的にADO⊃OLE DB⊃ODBC)機能を提供しているので、VBSからADOで簡単にDB2 for i を利用できるのです。
以下はサンプル・プログラムのソースです。前の記事の得意先マスター(TOKMSP)を読んで表示するだけのシンプルなプログラムです。仮に「ODBC.vbs」という名前で保存してあるとします。
1 Option Explicit
2
3 Const adOpenStatic = 3 'A static copy of a set of records
4 Const adLockReadOnly = 1 'Default. Read-only records
5
6 Dim args
7 Dim conn
8 Dim stmt
9 Dim rs
10 Dim i
11 Dim SQLresult
12
13 Set args = WScript.Arguments
14 Set conn = CreateObject("ADODB.Connection")
15 conn.Open "DRIVER=iSeries Access ODBC Driver;SYSTEM=" & args.item(0) & _
16 ";UID=" & args.item(1) & ";PWD=" & args.item(2) & ";EXTCOLINFO=1"
17
18 stmt = "select * from ライブラリー名.TOKMSP where TKBANG between '01080' and '02030'"
19 Set rs = CreateObject("ADODB.Recordset")
20 rs.Open stmt, conn, adOpenStatic, adLockReadOnly
21
22 For i = 0 to rs.Fields.Count - 1
23 if i > 0 Then SQLresult = RTrim(SQLresult) & vbTab
24 SQLresult = RTrim(SQLresult) & rs.Fields(i).Name
25 Next
26
27 SQLresult = Replace(SQLresult, " ", "")
28 SQLresult = Replace(SQLresult, " ", "")
29 SQLresult = RTrim(SQLresult) & vbCrLf
30
31 Do Until rs.EOF
32 For i = 0 to rs.Fields.Count - 1
33 if i > 0 Then SQLresult = RTrim(SQLresult) & vbTab
34 SQLresult = RTrim(SQLresult) & rs.Fields(i).Value
35 Next
36 SQLresult = RTrim(SQLresult) & vbCrLf
37 rs.MoveNext
38 Loop
39
40 WScript.echo SQLresult
41
42 rs.Close
43 conn.Close
44 Set rs = Nothing
45 Set conn = Nothing
ご覧のように、IBM i に接続をはってSQLを実行、結果を表示するだけの簡単なスクリプトです。ちょっと変わっているのは、16行目で「EXTCOLINFO=1」を指定し、フィールド名ではなくCOLHDGを取得しているくらいです。COLHDGは20桁×3で余分な空白が入るので、27~28行目でこれを除去しています。
このスクリプトは3つのパラメーター(サーバーのIPアドレス、ユーザー名、パスワード)があり、例えば次のように呼び出す事ができます。
※ 実行環境はWindows XP Professional (SP2)、Access for Windows 6.1 (SI34289)、OS/400 V5R4 (Cum 8183)で稼動確認しています。「スタート」→「プログラム」→「IBM System i Access for Windows」→「ODBC管理」で、Access for WindowsのODBCドライバーがインストールされていることを確認しておいてください。
1. ショートカットから呼び出す。
スクリプト「ODBC.vbs」へのショートカットを作ります。作成したショートカットのプロパティを開き、「リンク先(T)」に「"C:\...\ODBC.vbs" IPアドレス ユーザーID パスワード」という書式でパラメーターを追加します。
あとは作成したショートカットをダブルクリックすればIBM i に接続、SQLを実行し、結果をウインドゥに表示します。
2. CScriptコマンドから実行する。
Windowsのコマンド・プロンプトから「CScript //nologo ODBC.vbs IPアドレス ユーザーID パスワード」で実行できます。結果はそのままコマンド・プロンプトに表示されます。
これだけだと画面に出て終わりなので、「CScript //nologo ODBC.vbs IPアドレス ユーザーID パスワード > 結果.txt」として出力をリダイレクトすると「結果.txt」というファイルが作成されます。このファイルはタブ区切り形式のテキストファイルなので、Excelで開くと下図のようになります。
ExcelがインストールされているPCであればファイルを介さなくても、VBAで簡単にワークシートを直接作成することもできますね。
割と簡単にWindowsからDB2 for i のデータが利用できると感じていただけましたでしょうか。ただし、データが大量になった場合のパフォーマンスなどは考慮していませんので、配列を使用するなどの配慮が必要になるでしょう。また、業務で利用するにはパラメーターの渡し方や、パスワードの取り扱いなども検討すべきでしょう。
.
久しぶりの書き込みでしたが、そのうち時間があればJDBCでの利用や、RPGのFree format SQLを利用した例などもご紹介したいと考えています。
では、今年もよろしくお願いいたします。m(_ _)m
ここに書かれている内容は私の所属する会社、組織とは関係ありません。 内容を誰かが保証する物ではありません。
この記事にはトラックバック・コメントがありません。
コメントは投稿者の責任においてなされるものであり,サイト管理者は責任を負いません。
ODBC、ADO とか JDBC とか、けっこう DB2 for IBM i ってそれこそ "ユニバーサル" にいろんなクライアントから利用できるんですよね。
これだけいろんなクライアントをかんたんに使えるデータベースってそんなにないと思うんですけど、もっとそれを活用してもらいたいものですよねぇ。。