VBScriptから「PostgreSQL」データベースに接続し、SQLの実行から実行結果を取得する方法を解説しています。
今回は、AnsibleAWXのデータベースに接続して、ジョブテンプレートの情報を取得してみたいと思います。
また、pgAdminで取得した結果と比較して、どのような違いがあるのかも合わせて確認してみます。
ソースコード
まずはソースコードになります。
Option Explicit
' ファイルシステムオブジェクトの作成
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
' 関数の読み込み
Execute fso.OpenTextFile("function.vbs").ReadAll()
Dim result, dns, sql, file
' SQLの実行結果
result = ".\log.txt"
dns = "DSN=PostgreSQL35W_AWX"
sql = "SELECT * FROM ""main_jobtemplate"""
Dim objConn, objRS
Set objConn = CreateObject("ADODB.Connection")
Set objRS = CreateObject("ADODB.Recordset")
objConn.ConnectionString = dns
objConn.Open
' SQLの実行
objRS.Open sql, objConn
' ファイルの削除
Call DeleteFile(result)
' テキストファイルのオープン(追記モード)
Set file = fso.OpenTextFile(result, 8, True)
Dim i, str
Do Until objRS.EOF
str = ""
For i = 0 To objRS.Fields.Count - 1
str = str & objRS.Fields(i).Value & ","
Next
str = Mid(str, 1, Len(str)-1)
file.WriteLine(str)
objRS.MoveNext
Loop
objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
Set fso = Nothing
ソースコードの解説
3-8行目は、別の部品として定義している関数の読み込みを行っています。
部品化する方法は以下で解説しているので参考にしてみて下さい。
今回は、SQLの実行結果を出力するテキストファイルを削除するための機能を部品化しています。
13行目の「result」は、SQLの実行結果を格納する変数です。
サンプルでは、「”.\log.txt”」となっているので、実行したVBScriptファイルと同じフォルダに「log.txt」というファイル名で出力します。
14行目は、PostgreSQLデータベースに接続するためのODBCドライバのDNSを定義しています。
ODBCドライバのインストールや設定を行っていない方は以下の記事を参考にして下さい。
15行目は、実行するSQL文を記述しています。
18、19行目は、ADODBの初期化で、22行目にコネクションを開設して、25行目でSQLを実行しています。
28行目で、SQLの実行結果を出力したテキストファイルが存在する場合に削除を行っています。
31行目で、SQLの実行結果を出力するファイルを初期化しています。
35-43行目で、SQLの実行結果を行と列でループを行いつつ、ファイルに書き出しています。
今回は、各レコードをカンマ区切りで出力しています。
45行目以降は、各種オブジェクトを破棄しています。
SQL実行結果の比較
今回のVBScriptで取得した結果とpgAdminで取得した結果を比較してみます。
下の画像は、WinMergeでの比較結果になります。
一部のカラムでは、ダブルクォーテーションの有無が差分となっています。
また、「False」が「0」になっていることが分かります。
値は取得出来ていますが、微妙に内容が異なるので注意が必要なポイントですね。
記事は以上になります。pgAdminで取得した結果に比べ、一部差異がありましたが、簡単にデータベースの情報を取得出来ました。
スクリプトにしておくことで、定期的にデータを取得して監視を行ったりすることも簡単に出来ますね。是非とも活用して頂ければと思います。
コメント