end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転します

excel vbaからPostgreSQLに接続

excel vbaからPostgreSQLに接続できますが、その方法を忘れてしまうので、書き留めておきます。

↓参考ページ
http://www.primestaff.jp/fumitakablog/2008/06/postgresqlaccessexcel.html

VisualBasic Editor→ツール→参照設定

私のPCには、PostgreSQL ver.8.3 for win をインストールしていますが、接続ツール(ODBC?)である 「PostgreSQL OLEDB 1.0 Type Library」もインストールされるようです。

postgresへ接続するには予め、VisualBasic Editorの画面からツール→参照設定でこれを選択しておく必要があります。

サンプルプログラム

次のvbaは、postgresへ接続し、select文を発行するものです。

Sub selectPostgres()

Dim gpgDB As ADODB.Connection
Set gpgDB = New ADODB.Connection

'DB接続 DBNAME=EndoTest ID=postgres PASSWD=""
gpgDB.Open "Provider=PostgreSQL;Data Source=localhost;location=EndoTest", _
           "postgres", ""
           
gpgDB.BeginTrans

Dim pgRs As ADODB.recordSet
Set pgRs = New ADODB.recordSet

'SQL発行
pgRs.Open "select teicode from data_src", gpgDB, _
           adOpenStatic, adLockReadOnly '静的カーソル,読み取り専用

'レコードセットの参照
Do Until pgRs.EOF
    MsgBox pgRs.Fields("teicode").Value
    pgRs.MoveNext
Loop

pgRs.Close

'gpgDB.RollbackTrans
gpgDB.CommitTrans

gpgDB.Close

End Sub

普段、perlからpostgresを利用する際、次のようにautocommit = off にしていますが、vbaでの指定方法が分かりませんでした。

BeginTrans, RollbackTrans, CommitTrans で代用するしかないのだろうか?

package Test::DBI;

use strict;
use base qw/DBI/;
use Test::Config;

my $DB = config()->DB->address;
my $DB_USER = config()->DB->db_user;
my $DB_PASS = config()->DB->db_pass;
my $CLIENTENCODING = config()->DB->client_encoding;

my $DBI_OPT = { AutoCommit => 0 };

sub connect {
    my $dbh = DBI->connect($DB,$DB_USER,$DB_PASS,$DBI_OPT);
    $dbh->do("SET CLIENT_ENCODING TO $CLIENTENCODING")
	or die "cannot set encoding";
    return $dbh;
}

1;