PR

【Access VBA】SQL Serverなどの外部データベースへの接続方法(OLE DB経由)

Access
記事内に広告を含む場合があります。

Accessにて、SQL ServerやOracleなどの外部データベースに接続するには、リンクテーブルを張る方法の他に、OLE DB経由で接続する方法があります。
この方法にはADOを使うのですが、ODBC経由でリンクテーブルを張るよりも多少の手間がかかりますが、高速処理が可能です。そのため、大量データを扱うのに適しています
ここでは、リンクテーブルを張らずにOLE DB経由で接続する方法をご説明いたします。

なお、ODBC経由でリンクテーブルを張る方法は、以下の記事をご参照ください。

AccessのVBAを書籍でコツコツ学習したい方はこちら

接続文字列について

OLE DB経由で接続する場合にも、接続文字列というものをコーディングする必要があります。
但し、ODBC経由の場合と記述方法が違います

以下に、代表的なDBMSでの接続文字列の記述方法をまとめました。

SQL Server

Provider=SQLOLEDB;Data Source=<接続先サーバ>;User Id=<ユーザID>;Password=<パスワード>;Initial Catalog=<データベース>

Oracle(Microsoft製)

Provider=MSDAORA;Data Source=<接続先サーバ>;User Id=<ユーザID>;Password=<パスワード>

Oracle(Oracle製)

Provider=OraOLEDB.Oracle;Data Source=<接続先サーバ>;User Id=<ユーザID>;Password=<パスワード>

PostgreSQL

Provider=PostgreSQL OLE DB Provider;Data Source=<接続先サーバ>;Location=<データベース>;User ID=<ユーザID>;Password=<パスワード>

SQL Serverでのサンプルコーディング

SQL Serverを例に、実際にOLE DB経由でデータベースにアクセスするためのコーディングは、以下のようになります。
なお、ADOを使うことになりますので、「ADOって何?」という方は、以下の記事をご参照下さい。

サンプルコーディング(読み取り処理)

‘データベースに接続する
Dim objCN As New ADODB.Connection

‘★★ここに接続文字列を記述★★
objCN.Open "Provider=SQLOLEDB;Data Source=Server1;Initial Catalog=PracticeDB;User ID=123456;Password=xxxxxxxx;"

'レコードセットオブジェクトを使ってテーブルを開く
Dim objRS As New ADODB.Recordset
objRS.Open "PracticeTable1", objCN, adOpenForwardOnly, adLockReadOnly

‘ADOを使ってテーブルを読み取るためのコーディングを記述
Do Until objRS.EOF
    Debug.Print objRS!ID & "," & objRS!Name
    objRS.MoveNext
Loop

'最後にお作法としてオブジェクトを解放
objRS.Close: Set objRS = Nothing
objCN.Close: Set objCN = Nothing

上記は読み取り処理のサンプルですが、もちろん追加・更新・削除もできます。
詳しくは、ADOについて解説した記事をご参照下さい。

AccessのVBAを書籍でコツコツ学習したい方はこちら
VBAをガッツリ学べるスクールについて

コメント

タイトルとURLをコピーしました