電脳リアルタイム通信 ONLINE
DENNOU REALTIME TSUUSHIN ONLINE.
Vol.2

■データアクセス・コンポーネント編

Q. …DAOとADOの宣言で混乱を回避

 連結フォームのレコードセットを利用しようと、次のようなコードを書きましたが、コンパイル・エラーが出て、うまく実行することができません。どこが悪いのでしょう。使用環境は、Access 2000 + mdbファイルです。

Dim rst As Recordset ' --- [1]

Set rst = Forms("frmMain").Recordset
rst.FindFirst "氏名 = '後藤次郎'"
...

A.

 Access 2000で利用できるデータアクセス・コンポーネントには、DAO(Data Access Objects)とADO(ActiveX Data Objects)の2種類あります。両者には、同じ名前のオブジェクトが含まれています。RecordsetやField、Parameterといったものです。
 連結フォームでは、DAOを利用してデータベース中のレコードを取得しています。そのため、FormのRecordsetプロパティで取得できるのはDAOのRecordsetオブジェクトです。

図4-1 mdbを新規作成時の参照設定
(表示されるライブラリ一覧の内容は、環境によって異なります)

 一方、上記プログラムのDimステートメントで宣言しているRecordset変数([1])は、どちらのコンポーネントに属するものでしょう? これは、使用している環境によって異なります。Alt+F11キーでVisual Basic Editor(VBE)を開いて、[ツール] - [参照設定] のメニューを開いてみましょう。mdbファイルを新規作成して、参照設定を何も操作していない場合、(図4-1)のようになります。この状態で新たにDAOへの参照を付け加えると、(図4-2)のようになります。

図4-2 DAOへの参照を追加

 VBでは、[1]のように宣言した場合、参照設定しているリストの上の方から順に該当するオブジェクトを検索します。図4-1, 4-2 いずれの場合でも、ADO中のRecordsetオブジェクトが最初に該当するので、[1] では、ADOのRecordsetオブジェクトを宣言していることになります。

 参照設定を操作し、DAOをリストの上位に持ってくることでこのエラーを避けることはできます。しかし、あとで環境を変更してしまえば再びエラーが復活します。これを根本的に避けるには、変数宣言のさいに、使用するオブジェクトがどのコンポーネント・ライブラリに属するものであるかを明示することです。具体的には、次のようにします。

Dim rst1 As DAO.Recordset …' DAOのRecordsetを使用
Dim rst2 As ADODB.Recordset …' ADOのRecordsetを使用

 つまらないエラーを避けるため、変数宣言のさいには、いつでもできるだけライブラリ名で修飾する習慣をつけるようにしましょう。

 なお、参照設定というのは、プログラム中で使用するオブジェクト・ライブラリをあらかじめ指定しておくものです。参照設定されていないライブラリを使用する場合には、プログラム中でCreateObject関数を使用しないとライブラリを使用することができません。

トップページ 1/4 次ページ

本サイト掲載の記事・写真等の無断での転載・複写を禁じます。
本ページは、技術評論社様のご好意により掲載許可をいただいたものです。 
技術評論社

Copyright(c)GIJYUTSU-HYORON Co., Ltd. All rights reserved.