2014/06/22
PostgreSQL
 >  PgOleDB で VBScript から接続
昨日に続いて PgOleDB のテスト。実行環境は 2014/04/17 を参照。VBS から接続する最小限のテンプレートを作った。↓
Option Explicit

Dim ado, row, col, str

Set ado = CreateObject("ADODB.Connection")
With ado
.Provider = "PostgreSQL OLE DB Provider"

WScript.StdOut.Write "Data Source (hostname or address) : "
.Properties("Data Source") = WScript.StdIn.ReadLine

WScript.StdOut.Write "Location (database) : "
.Properties("Location") = WScript.StdIn.ReadLine

WScript.StdOut.Write "user : "
.Properties("User ID") = WScript.StdIn.ReadLine

WScript.StdOut.Write "password : "
.Properties("Password") = WScript.StdIn.ReadLine

.Open
End With

Do
WScript.Echo "-----"
WScript.StdOut.Write "SQL : "
Set row = ado.Execute(WScript.StdIn.ReadLine)
WScript.Echo "-----"

Do Until row.EOF
For col = 0 To row.Fields.Count - 1
If col <> 0 Then WScript.StdOut.Write "|"
str = row.Fields(col).Value
If IsNull(str) Then str = ""
WScript.StdOut.Write str
Next
WScript.Echo ""
row.MoveNext
Loop
row.Close
Set row = Nothing
Loop

ado.Close
Set ado = Nothing

適当な場所・ファイル名で保存して cscript コマンドで実行すると、 ↓ のように接続パラメータ四つを順々に入力待ちし、サーバに接続できたら SQL の入力待ちに変わる。Data Source と Location は、デフォルト(localhost、postgres)でよければリターンのみで可。パスワードをマスクできないか調べたが、今のところ方法が見つからない。


↓ SQL を入力してリターンを押すと、列区切り | で結果を表示し、次の SQL 入力待ちになる。終了用コマンドは特に設定していない。代わりに Ctrl-C でスクリプトを強制終了する。


↓ SQL で日付の連番を出したところ。タイムスタンプ型なので本来は時刻 00:00:00 が付くが(二番目のクエリツール画面)、PgOleDB か ADO どちらかの仕様で時刻が消える。



↓ 時刻が 00:00:00 でなければ、きちんとタイムスタンプ型で返ってくる。


↓ 配列など PostgreSQL 独自の型には PgOleDB が未対応。Query returned unhandled type 1007 というエラーメッセージが出てスクリプトが終了する。


このようにデータの受け取り方には注意がいる。また昨日書いたポートの件(5432 のサーバにしか接続できない)もあるので制約が多いが、急に必要になるかもしれないのでメモした。
<< HTML の表を XML 型で処理(1)
PgOleDB で Excel VBA から接続 >>
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。