トップ > スキル : アプリケーション > VBA for Access > 応用編(データベースオブジェクト DAOとADO)

VBA_Access

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を使用してデータベースを操作する流れは以下のようになります。

  1. データベースに接続
  2. レコードセットの取得
  3. レコードの操作(追加、更新、削除など)
  4. レコードセットなどのオブジェクトを閉じる
  5. メモリ上の情報を消去

4番目のオブジェクトを閉じる時は、Closeメソッドを使用します。このCloseメソッドはデータベースとの接続を解除します。

5番目のメモリ上にある情報を消去するには、Setステートメントを使用して、Nothingを代入します。ADOもDAOと同様にメモリ上にデータを一旦格納してから操作を行いますので、データベースの操作が終了する時にはメモリ上のデータを消去しておく必要があります。

Set オブジェクト変数 = Nothing


プログラミングで一番重要なのがレコードセットの扱い方です。
レコードセットとは、テーブルフィールドのレコードデータや、クエリを実行して取得したデータの集まりのことで、ADOはDAOと同様にRecordsetオブジェクトを利用してプロバイダからのデータを操作します。

【Recordsetオブジェクトの留意点】
  • Recordsetオブジェクトは、レコードセットを扱うオブジェクト
  • 事前にRecordsetオブジェクトを定義してからレコードセットを扱う
  • すべてのRecordsetオブジェクトはレコード(行)とフィールド(列)で構成されている
  • Recordsetオブジェクトは、常に得コードセット内の1つのレコードをカレントレコードとして参照する

Recordsetオブジェクトの作成方法

レコードセットを作成するには、以下のような方法があります。

  1. RecordsetオブジェクトのOpenメソッドを利用。
    プロシージャ内のレコードの更新、追加、削除を行えます。
  2. ConnectionオブジェクトのExecuteメソッドの利用。
  3. CommandオブジェクトのExecuteメソッドの利用。
    SQLステートメントを用いてクエリを作成する場合は、ConnectionオブジェクトのExecuteメソッドを使用しますが、読み取り専用のレコードセットとなります。