トップ > スキル : アプリケーション > VBA for Access > 応用編(データベースオブジェクト DAOとADO)
データベースへ接続する
オブジェクト変数を宣言して参照先を代入した次は、データベースと接続します。データベースと接続するオブジェクトはConnectionオブジェクトで、次のような記述方法を行います。
Dim cn As ADODB.Connection
※ cnはオブジェクト変数
カレントデータベースへ接続
カレントデータベースを参照するには、現在開いているデータベースを表すCurrentProjectオブジェクトのConnectionプロパティを利用します。
Set cn = CurrentProject.Connection
※ cnはオブジェクト変数
《 記述例 》
現在のAccessで利用できるADOバージョンを調べるには以下のような記述をします。
Sub ADOバージョン() Dim cn As ADODB.Connection Set cn = CurrentProject.Connection MsgBox cn.Version cn.Close: Set cn = Nothing End Sub
動作を確認すると、バージョン数を表すメッセージが表示されます。

カレントデータベースに接続するには、ConnectionオブジェクトのCurrentProjectオブジェクトにあるConnectionプロパティを用います。これは、DAOのCurrentDbメソッドと同じ考え方となります。
カレントデータベース以外のデータベースに接続
カレントデータベース以外のデータベースに接続する場合は、ConnectionStringプロパティとOpenメソッドを使います。
接続手順は、まずConnectionオブジェクトのConnectionStringプロパティを設定し、その後にConnectionオブジェクトのOpenメソッドを実行します。
◆ ConnectionStringプロパティ
データベースへの接続情報を保持します。
【書式】
ConnectionString = "キーワード=値[;キーワード=値]"
- キーワード:プロバイダ名(Provider)、データソース(Data Source)、プロバイダ固有の設定を指定。複数ある場合はセミコロン(;)で区切ります。
- 値:キーワードへの詳細情報
【留意点】
- プロバイダ名とデータソースのキーワードは省略できません。
プロバイダ名 値 Jet4.0(Access 2003まで) Microsoft Jet OLEDB.4.0 ACE12.0(Access 2007) Microsoft.ACE.OLEDB.12.0 Oracle MSDAORA SQL Server SQLOLEDB ODBCドライバ MSDASQL - データソースには、JetやODBCではデータベース名を指定し、OracleやSQL Serverではサーバ名を指定します。また、該当するデータベースまでを絶対パスで記述する必要があります。
- プロバイダ固有の設定には、ユーザID、パスワードなどのようなデータベース接続に必要な情報を記述します。
◆ Openメソッド
ConnectionオブジェクトのOpenメソッドを使うとデータベースに接続できます。このOpenメソッドは、カレント、またはカレント以外のデータベースでも使用可能です。
【書式】
Connectionオブジェクト Open 接続文字列
- 接続文字列:接続するデータベース名を指定しますが、ConnectionStringプロパティで指定してある場合は、省略できます。
《 記述例 》
Access 2007バージョンで Dドライブのaccessフォルダ内のVBA練習.accdbの状態を調べるには以下のような記述をします。
Sub 外部データベースへの接続() Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" _ & "Data Source=D:\access\VBA練習.accdb" cn.Open Select Case cn.State Case adStateClosed MsgBox "データベースは閉じています。" Case adStateOpen MsgBox "データベースは開いています。" End Select cn.Close: Set cn = Nothing End Sub
以下のようなメッセージが表示されます。

ADOプログラミングの流れ
ADOを使用してデータベースを操作する流れは以下のようになります。
- データベースに接続
- レコードセットの取得
- レコードの操作(追加、更新、削除など)
- レコードセットなどのオブジェクトを閉じる
- メモリ上の情報を消去
4番目のオブジェクトを閉じる時は、Closeメソッドを使用します。このCloseメソッドはデータベースとの接続を解除します。
5番目のメモリ上にある情報を消去するには、Setステートメントを使用して、Nothingを代入します。ADOもDAOと同様にメモリ上にデータを一旦格納してから操作を行いますので、データベースの操作が終了する時にはメモリ上のデータを消去しておく必要があります。
Set オブジェクト変数 = Nothing
プログラミングで一番重要なのがレコードセットの扱い方です。
レコードセットとは、テーブルフィールドのレコードデータや、クエリを実行して取得したデータの集まりのことで、ADOはDAOと同様にRecordsetオブジェクトを利用してプロバイダからのデータを操作します。
【Recordsetオブジェクトの留意点】
- Recordsetオブジェクトは、レコードセットを扱うオブジェクト
- 事前にRecordsetオブジェクトを定義してからレコードセットを扱う
- すべてのRecordsetオブジェクトはレコード(行)とフィールド(列)で構成されている
- Recordsetオブジェクトは、常に得コードセット内の1つのレコードをカレントレコードとして参照する
Recordsetオブジェクトの作成方法
レコードセットを作成するには、以下のような方法があります。
- RecordsetオブジェクトのOpenメソッドを利用。
プロシージャ内のレコードの更新、追加、削除を行えます。 - ConnectionオブジェクトのExecuteメソッドの利用。
- CommandオブジェクトのExecuteメソッドの利用。
SQLステートメントを用いてクエリを作成する場合は、ConnectionオブジェクトのExecuteメソッドを使用しますが、読み取り専用のレコードセットとなります。