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をガッツリ学べるスクールについて
コメント