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

VBA_Access

ADO

ADO(Active X Data Object)は、OLEDBプロバイダを介してデータベースにアクセスするインターフェイスで、Access 2000バージョンから搭載されています。主に、ネットワークを介した外部データベース(SQL Serverなど)または、Accessファイルと接続した形態を扱える点がDAOと異なる点です。


ADOでは、テーブル、クエリへ直接アクセスできます。ただ、ADOはDAOと違い、データベースの新規作成、テーブル、クエリの作成はできません。その機能を補完するものとして、ADOXが用意されています。

ADOで実現できる操作は以下のようなものです。

  • レコードの追加、削除
  • レコードの検索
  • レコードの抽出
  • レコードの並べ替え
  • レコードの移動
  • レコードの取得

ADOモデルの階層構造

ADOモデルもDAOと同様に各コレクションとオブジェクトで構成されています。

Connectionオブジェクト
最上層のConnectionオブジェクトは、データベースへの接続を表す。
Commandオブジェクト
データベースに対して実行するコマンドを保持する。
Recordsetオブジェクト
テーブルから取得したレコードセット全体、またはコマンド実行によって返されたレコードを返す。
Parametersコレクション、Parameterオブジェクト
CommandオブジェクトのすべてのParameterオブジェクトを格納する。
Propertiesコレクション、Propertyオブジェクト
1つのオブジェクトの特定のインスタンスのPropertyオブジェクトをすべて格納する。
Fieldsコレクション、Fieldオブジェクト
Recordsetオブジェクトまたは、RecordオブジェクトのすべてのFieldオブジェクトを格納する。

※ ADOにはDAOと同じ働きをするオブジェクトがあります。どちらを使用するかという選択は利用するユーザに任されますが、ローカル環境ではDAO、そしてネットワークを介する環境であればADOを利用すると切り分けてしまうと良いでしょう。また、ADOとDAOは併用できるので、利用する場面で使い分けられます。

※ ADOを利用するには、[参照設定]ダイアログボックスのMicrosoft ActiveX Data Objects ○ Libraryにチェックを入れる必要があります。

Accessのバージョンによって、ADOのバージョンも異なります。Access2000、2002、2003ではADO2.○ですが、Access2007ではADO6.○です。

※ ○の部分は、細かなバージョン情報となり、環境によって数字が異なります。

オブジェクトへの参照方法

ADOモデル階層の各オブジェクトを参照する方法には以下のような方法があります。

  • オブジェクト名を利用する
  • インデックス番号を利用する

オブジェクト名の利用

例えば、「T_商品リスト」テーブルには、Noと商品名の2つのフィールドが存在しているとします。これらのフィールドをレコードセットで利用する場合、次のような記述方法をします。

★ Recordset.Field("No") 及び Recordset.Field("商品名")

オブジェクト名を()の中で使用します。必ずダブルクォーテーションで囲みます。

★ Recordset!Field!No 及び Recordset!Field!商品名

感嘆符(!)で繋ぐ方法で、コレクションに続きオブジェクトを繋ぎます。

★ Recordset!No 及び Recordset!商品名

Fieldオブジェクトは省略可能なので、オブジェクト名を直接繋ぎます。

インデックス番号の利用

オブジェクトは、作成された順番に0から始まるインデックス番号が付与されます。このインデックス番号を指定して、オブジェクトを参照します。この場合は、RecordsetオブジェクトとFieldオブジェクトをドットで繋いだ方法を取ります。

例) Recordset.Field(0)

インデックス番号は、0から始まるので、最初に作成したフィールドは0番、2つ目に作成したフィールドが1番となります。また、どのフィールドが何番目のインデックスかを見分けることはできないので、ADOを利用して0から始まるインデックスを求める必要があります。

オブジェクト変数

ADOオブジェクトを扱うには、オブジェクト変数の宣言とオブジェクト変数への代入の処理を行う必要があります。

オブジェクト変数の宣言

Dim、Static、Private、Publicステートメントを使用して、ConnectionオブジェクトやRecordsetオブジェクトなどのオブジェクトを扱えるオブジェクト変数を宣言します。

クラス名の指定は、ADOコンポーネント(ADODB)とドットと繋げて記述します。例えば、オブジェクト変数名を「rs」とすると、以下のような宣言を記述します。

Dim rs As ADODB.Recordset

オブジェクト変数への代入

オブジェクト変数を宣言したら、次に実際のオブジェクトへの関連付けを行います。
DAOと同様に、参照先を代入するにはSetステートメントを利用しますが、ADOではNewキーワードを用います。以下が基本構文になります。

【書式】 Set オブジェクト変数名 = New クラス名

Newキーワードを付けてオブジェクトを宣言すると、宣言と同時にオブジェクトへの参照が代入されるので、Setステートメントを用いる必要がありません。

Dim rs As ADODB.Recordset
Set rs = New.ADODB.Recordset
     ↓
Dim rs As New ADODB.Recordset