2010年3月11日(木) 00:28 JST

HOME > SE的 > お手軽SQLプログラム (VBS編)

お手軽SQLプログラム (VBS編)

  • 2010年1月10日(日) 22:25 JST
  • 投稿者:
    hyahagi

DB2 for i を利用するには様々な方法があります。以前の記事でご紹介したように、MS-QueryやiNavi、あるいは一般的なSQLツールで簡単に利用できます。

とはいえ、業務で定型的にデータベース操作を行うにはSQLプログラムを作成するのが通例でしょう。この記事ではVBScriptでお手軽にDB2 for i を利用する簡単な例をご紹介します。

.



ご存知の方も多いと思いますが、VBScript(以下VBSと略称)はWindowsで利用可能なスクリプト言語です。

VBSはスクリプト言語なのでコンパイル不要で簡単に利用できますし、OLE(ActiveX)の操作を得意とし、ExcelやAccessと連携も可能ですのでいろいろと応用が利くと思います。Access for WindowsはODBC(基本的にADOOLE DBODBC)機能を提供しているので、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

 


 

 ここに書かれている内容は私の所属する会社、組織とは関係ありません。 内容を誰かが保証する物ではありません。

トラックバック

このエントリのトラックバックURL:
http://www.iforum.ne.jp/trackback.php/20100110222539986
表示形式
コメント投稿

コメントは投稿者の責任においてなされるものであり,サイト管理者は責任を負いません。

  • お手軽SQLプログラム (VBS編)
  • 投稿者:hidehi on 2010年1月17日(日) 22:39 JST

ODBC、ADO とか JDBC とか、けっこう DB2 for IBM i ってそれこそ "ユニバーサル" にいろんなクライアントから利用できるんですよね。

これだけいろんなクライアントをかんたんに使えるデータベースってそんなにないと思うんですけど、もっとそれを活用してもらいたいものですよねぇ。。

iForumサポーター

      iFourmの趣旨にご賛同いただき、ご支援いただける企業または個人を募集しています。詳しくは、info@iforum.ne.jp へお願いします。