ADOって何? |
|
Accessで作ったデータベースの中にはいろいろなオブジェクトが存在しています。 |
それらは名前で区別していますが、VBAで、例えばテーブルの中のレコードを扱う場合はどのデータベースのどのテーブルの中のどのデータをどう扱うか・・・ということを細かに書き記さなければなりません。 |
データベースの中のいろいろなオブジェクトがどういうふうになっているのかを記してあるオブジェクトのことをライブラリと呼び、VBでデータベースを操作する時に使用します。
|
オブジェクトライブラリの種類が変われば、VBAでのコードの書き方も変わります。 |
(VBAはAccessの機能ではなく、Accessのオブジェクトを操作するためのプログラミング言語でしたね。) |
|
Access97では、DAO(Data Access
Object)というライブラリが使われていました。 |
Access2000では、標準ではADO(ActiveX
Data Object) が使用されていますが、DAO(DAO3.6)も使用できます。 |
|
では、実際にライブラリがあるかどうか見てみましょう。 |
VisualBasicエディタのウィンドウの「ツール」→「参照設定」を見てください。 |
|
ActiveX Data Object 2.1 Library が、ADOです。チェックされているので、使用できます。 |
|
では、ADOとDAOの特徴を見ていきましょう。
|
|
■ADO(ActiveX Data Object2.1) |
ADOは、DAOの後継として開発されたオブジェクトです。OLEDBプロバイダを介して、いろいろな種類のデータベース(Microsoft
SQL Server、Microsoft Access、Oracle、その他ODBC接続できるデータベース)に同じ手法で接続することができます。接続した後は、データベースの種類に関係なく、同じ手法でデータベース操作を行うことができます。 |
OLEDBプロバイダは、データベースにアクセスする手法を実装したコンポーネントで、データベースに接続するための道具と考えて構いません。 |
|
(1)ADOの制限 |
ADOでは、Accessのフォームと組み合わせて利用する場合は制限があります。 |
下記の場合は、DAOを利用する必要があります。 |
・フォームのレコードソースをプログラムの中で扱うとき |
・プログラムで作成したレコードセットをフォームに表示し、フォーム上でレコードを編集するとき |
|
Access2000では、1つのデータベースの中でADOとDAOを並行して使用することができます。 |
しかしながら、ADOとDAOのrecordsetオブジェクト(後述)には互換性はなく、ADOのRecordsetオブジェクトをDAOのRecordsetオブジェクトに代入することもできないので、注意してください。
|
ADOでは、テーブルやクエリの作成や変更を行う場合には、ADOX(Microsoft
ADO Extensions 2.1 for DDL and Security)を利用する必要があります。ADOXもライブラリ一覧の中にあるので、あとで見ておいてください。
|
|
(2)ADOのオブジェクト |
ADOには、7種類のオブジェクトがあり、階層構造になっています。このうち、よく利用するのは、ConnectionオブジェクトとCommandオブジェクトです。 |
|
 |
Connectionオブジェクトは、データベースへの接続を表すオブジェクトです。VBでデータベースを操作するときは、最初に作成します。
Commandオブジェクトは、データベースに対して実行するコマンドを保持するオブジェクトです。クエリはプログラム中に記述したSQLステートメントを実行する時に使用します。
Recordsetオブジェクトは、テーブルやクエリから取得したデータや、Commandオブジェクトを実行して取得したデータの集まりを保持するオブジェクトです。
Accessのテーブルは、複数のフィールドで構成されます。これと同じように、Recordsetオブジェクトにも、Fieldオブジェクトを含めることができます。Fieldオブジェクトのコレクション(同じ種類のオブジェクトの集合体)はFieldsコレクションとなります。
|
|
|
(3)オブジェクトの参照方法 |
次にオブジェクトの参照方法について見てみましょう。 |
例えば、下記のようなRecordsetオブジェクトがあったとします。 |
|
Fieldsコレクション |
0番目のField
|
1番目のField
|
2番目のField
|
3番目のField
|
4番目のField
|
|
|
2番目のFieldオブジェクトを参照したい場合は、
|
recordset.Fields(1) ←インデックス番号を使用 |
または、 |
recordset.Fields!1番目のField ←オブジェクト名「1番目のField」を使用 |
recordset!1番目のField ←オブジェクト名「1番目のField」を使用 |
|
(4)オブジェクトの扱い方 |
ADOオブジェクトを扱う場合は、 |
- オブジェト変数を宣言する
- 宣言したオブジェクト変数に、オブジェクトの参照を割り当てる
|
という処理が必要です。 |
|
|
■DAO(Data Access Objects) |
Access2000では、DAO3.6をサポートし、DAOを利用すると、Microsoft
Jetデータベースエンジン(version4.0)を使ってAccessデータベースに接続し、テーブルやクエリの作成や変更を行うことができます。また、テーブルに登録されているデータを取得してレコードを抽出したり、値を更新したりすることができます。 |
DAOを利用してODBCデータソースに接続する場合は、ODBCDirectという手法を使用します。 |
|
Access2000で、DAOを利用する場合は、ライブラリ一覧からDAOを追加し、優先順位を変更する必要があります。 |
もう一度、VisualBasicエディタのウィンドウの「ツール」→「参照設定」を見てください。 |
|
この一覧がそのPCで扱うことの出来るライブラリの一覧で、他のソフトウェアで使っている関数などをここでも使わせてほしいという設定をする画面です。ただ、機能そのものが使えるようになるわけではないので注意して下さい。 |
|
下のほうにあるDAOの左側にチェックをつけ、ADOより上に優先順位をあげれば、Access97で作成したDAOを使ったプロシージャも動くようになります。 |
|
プライベートプロシージャや、テーブルやクエリを扱わないプロシージャは関係ないと思いますがAccess97で作ったデータベース内のプロシージャを一つ一つ確認してみないとこの設定が必要かどうかわからないので注意して下さい。 |
|
次は実際にVBAでデータベース操作するときのプログラムを見ていきましょう。 |
|
|
|