Hatena::ブログ(Diary)

end0tknrのkipple - web写経開発 RSSフィード

2008-09-14

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の画面からツール→参照設定でこれを選択しておく必要があります。

f:id:end0tknr:20080914214123p:image

サンプルプログラム

次の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;

wedoitwedoit 2013/12/06 18:57 ExcelでPostgreのデータを取得/更新するなら、ExcelDBToolをお勧めします。
テーブルのデータをエクセルに取得、更新、削除することだけではなく、複数のSQLを実行して、結果を
一括Excelの各シートに出力することもできます。データ作成の機能を使って、
氏名、住所、電話など60種類以上のダミーデータも作成できます。
作成したデータを直接DBに登録して、シート名とテーブル名が一致すれば、
一括で複数テーブルのデータもExcelに取得できます。
詳しくは下記サイトをご参照ください。

http://www.superdbtool.com

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。

トラックバック - http://d.hatena.ne.jp/end0tknr/20080914/1221396045