VBSでPostgreSQLを使ってSQLを実行したい場合、一番手っ取り早いのはODBCをインストールしてADOを使うことかなと思います。
ADOでPostgreSQLを使う方法はQiitaにもまとめられているのでこちらのQiitaの記事を参考にしていただければと思います。
今回は要件面でADOが使えない環境でVBSからPostgreSQLを使わなければならない条件下で若干強引に実行するためにしました。
備忘録もかねて記事に残しておきたいと思います。
PSQL.exeのインストールやDBへの接続確認は出来ていることを前提としています。
VBSでpsql.exeを使ってPostgreSQLを操作する方法
[voice icon="http://202406231600346368291.onamaeweb.jp/wp-content/uploads/setting_image/man01.png" type="r big hkdsr"]最初に結論を書いてしまいます。[/voice]
- VBSでSQLを実行するコマンドを行うバッチの作成
- VBSでバッチを実行する
これだけです。
psql.exeの実行はCMDから行う必要があるので、実行するためのバッチを作って、バッチをVBSから呼び出すことで、VBSからpsql.exeを使ってPostgreSQLを操作するようにしました。
VBSでpsql.exeを使ってPostgreSQLを操作するコードサンプル
- ソース例
サンプルでは「table1」から全権取得するSQLを実行するバッチを作成し、VBSから呼び出すようにしました。
' === バッチファイルの作成 ===
' バッチのソースコードを作成
set bat_code = "psql -h xx.xx.xx -h foo -c ""select * from table1;"""
' バッチファイルを作成
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("C:\work\test.bat", 2 , True)
file.WriteLine bat_scode
file.close
' === バッチを実行 ===
Set oWshShell = CreateObject("WScript.Shell")
oWshShell.Run "C:\work\test.bat", 1, True
本当に簡略化したコードだとこの程度で実現できました。
はまったポイント
1番ハマったのはバッチの実行部分でした。
最初、Execで実行しようとしたのですが、バッチで実行するpsqlがうまく実行されずにSQLが実行できませんでした。
そこで、今回のサンプルでは、Runコマンドで実行するよう対応しました。
VBSでpsql.exeを実行するようにするメリット
1)VBSから動的パラメータが渡せる。
今回のように直接SQL実行する場合などは、テーブル名をVSBで生成してSQL文に使うなど、結構柔軟に対応できます。
2)メタコマンドが使える
ADOではメタコマンドを使えません。一方この方法であればメタコマンドも使うことができます。
VBSでpsql.exeを実行する応用例
1)メタコマンドを使うケース
VBSでメタコマンドを使いたい場合などはこの方法は結構有効かと思います。
最後にまとめ
この方法を利用したいケースはかなりニッチな場合だと思います。
もし利用するケースがあれば、参考にしてみてください。