<HOME  <お願い事項  <Access2000 TOP   <Access97 TOP   <サイト内検索
  Ac2002--VBAの沼 > 参照設定
  



参照設定

今回はちょっと余談、というか、こぼれ話です。

ADOとかDAOとかいう単語、耳にしたことあります???
ADOとはMicrosoft ActiveXR Data Objects(ADO)、DAOとはMicrosoftR Data Access Objects(DAO)のことです。
ソフトの名前とか、機能の名前とか、そういうんじゃないんですが、VBAを使う際、ときどき必要となる単語です。

VBAでテーブルやクエリの値を扱うときって、「レコードセット」っていうものを使う、っていうお話しましたよね。
「データベースに接続する」という回りくどい表現も登場しました。
では、どうやって「データベースに接続する」のでしょう。
この、「データベースへの接続の仕方」「レコードセットの開き方」には、いくつかの「手法」があるのです。
ADO、DAOというのは、その「手法」一種です。

ラーメン屋さんって、いろんなタイプの店があるじゃないですか。
店によって独自のメニューがありますよね。
食券を買ってからカウンターに座るタイプの店もあるし、とりあえず店にはいってカウンターに座って、店の親父の顔を見てからラーメンを注文するタイプの店もあります。
店によって「店にはいってからラーメンを食って金を払うまでの流れ」は、違うはず。
店によって注文や会計のシステムが異なるわけです。

Aというラーメン屋で、食券を買ってから席に着いたからといって、Bという店に行って入り口付近で食券の券売機がないないといってうろたえ、店の主人に「ウチは食券じゃないですから」と言われても頑なに食券を買おうとしている人、なんて、あんまりいないですよね。
郷に入りては郷に従え。その店独自のやり方があるはずです。
まあ、そのシステムに従わなかったからと行って殺されることはないでしょうが、わたしたちは来店したら、まずその店のシステムを理解しなければなりません。わからなければ店の人に聞けばいい。
ある店では、

  「食券を買う」→「トッピングを選ぶ」→「カウンターの脇の箱に食券を入れる」→「席が空いて案内されるのを待つ」

という段取りかもしれないし、またある店では

  「カウンター席の後ろに並ぶ」→「空いたところに早いもん勝ちで座る」→「ラーメンは一種類しかないので座ると勝手に出てくる」

という段取りかもしれません。

ADOやDAOといった単語も、これら「段取り」を表しています。
データベースやレコードセットとやり取りをするための「段取り」を取り決めた技術の名前です。
どっちもMicrosoftが考え出して、いろんなソフトウェアやデータベースに組み込んでいる技術、という解釈でいいと思います。
表立って出てくるソフトウェアの名前ではないので、実体が掴みにくいんです。
ラーメン屋だって見た目はどこもラーメン屋ですよね。
でも、店に入ったら、その店のルールがある、それに則ってラーメンを注文する・・・。似たようなもんだと思ってください。


つまり、今、皆さんのPCの中のMS-Accessが、ADOという技術を使ってデータベースとやり取りをする状態になっているのか、DAOというやり方でやり取りする状態になっているのか、によって、コードの書き方を変えないとならないのです。
基本的に「両方」はありえない。両方使いまわさないとならないのであれば、ラーメン屋だって、食券と直接の高等の注文の両方に対応しなくちゃならないし、非効率だと思うんですよね。プログラミングだってそうです。いろんな手法が混じったら、多分ワケ分からなくなると思う。


Accessは、Access97の時は、DAOという方法を使ってデータベースとのやり取りの記述を書いていました。
なので、昔からAccessを使ってらっしゃる方には、DAOという書き方のほうがなじみが深いかもしれません。
でも、いろいろと新しい技術が生まれてきまして、Access2000では、ADOという方法がメインに使われるようになりました。
というと、ちょっと語弊があるんですが・・・。

こうした「DAO、ADOどちらを使うか」といった設定は、「参照設定」というところで行います。
これは、VBAという仕組みを持ち合わせているソフトウェアすべてに共通です。
MS-Accessだと、VBEのウィンドウの[ツール]→[参照設定]を開くと、現在の状態がわかります。

左端にチェックがついているものが、「このPCのこのMS-Accessで使うことができるものの一覧」という意味合いになります。
上のほうに(何番目か、は、PCによって違うのですが)、Microsoft ActiveX Data Objects2.1 Library というのがありますよね。
これがADOです。なのでこのPCでは、ADOというやり方でコードを各必要があります。
これがまた、難しいところなんですけれども・・・。

Windowsでのいろんな「ソフトウェア」というものは、その中の機能がすべてそのソフトをインストールすることだけでまかなえているわけではないのです。Windowsに最初から入っているファイルとか、他のソフトをインストールしたことによって使えるようになる機能とか、若干あります。いろんな機能を、複数のソフトで「共有」したり「貸し借り」したりしながら機能しているソフトが多い。
特に、VBAを使ったプログラミングなどのときは、1から全部自分たちで作るわけにもいかない・・・Dim AAA As Integer と書いたら、それは「変数の宣言で、Integerとは整数のこと」ということが、ちゃんとそのPCの中で解釈されないと、プログラミングなんていちいちやってられません。

MS-Access の中で、ADOという「手法」を使うことがどこかに記されていれば、Dim AAA As Integer とはすなわち「変数の宣言で、Integerとは整数のこと」であると、ちゃんとわかるわけです。
VBAで作成したプロシージャの中にどんなことが書いてあったらどうするのか・・・を、参照する「資料」の集まりが、上の図です。
といっても、実際に資料の一覧が出てくるわけではなく、実際にそれらの資料があるのは、その下の「場所」と書かれているところです。
なんか、フォルダ名とかファイル名が記されてますでしょう。
実際には、VBAの中でDim AAA As Integer という行があったら、コンパイルしたときとかに「Dimってなんや、AAAってなんや、Asってなんや、Integerってなんなんやー!!!」と、MS-Accessが資料を探しに来るわけです。
まずこの「参照設定」の一覧を見て、ADOというところにチェックがついてたら、ADOという技術が詰まっているファイルを所定の場所に探しに行って、msado21.tlbというファイルを探し、その中に記されている内容を元に、「ああ、なるほどなるほど」と理解して、実行にいたるわけです。

参照設定のところに、必要なチェックがついてなかったら、参照するものがないので、エラーになったりします。
「Format関数をちゃんと入力しているのに、エラーになる〜」なんて場合は、もしかしたらこの「参照設定」の設定がどれかおかしくなってるのかもしれません。単にチェックが外れちゃってる(誰かがワケ分からずはずしちゃったとか)場合もあれば、参照先のファイルが削除されてなくなってたり、壊れて開くことができなくなってしまっていたり、あるいは、他にもADOを使う開発ソフトみたいなのをインストールしてて、そいつをバージョンアップしたがためにADOの参照先のファイルの名前がかわってしまってたり、いろんな可能性があります。

ウチのサイトをご覧いただいている方は、ほとんどの方が「プログラミングとか開発とかって、始めて」という方だと思います。
MS-Access以外に(MS-Office以外に、という意味か)ADOがからむようなソフトウェアをインストールしている人もおられないでしょう。
なので、今までお話してきたようにADOというやり方でコードを書かれればよいと思います。
しばらく慣れてくると、DAOの方が扱いやすいかもな・・・とか、こうした「手法」によるメリットデメリットが見えてくると思います。
一般的なメリット、ではありませんよ。そんなのは存在しません。
食券のラーメン屋とカウンター注文のラーメン屋って、ドッチが味がいいです?
そういう違いはないでしょ。
ADOでもDAOでもドッチ使っても、最終目標は変わらないはず。メリットデメリットは使い方の問題です。

ただ、皆さんは会社でお仕事をしている方が多いと思いますので、

   ・部署内ではMS-Access97を使っている人が結構いるから、DAOで書かれたコードに直面することが結構あるなぁ
   ・MS-Access97で作ったデータベース、Access2002で動かしたいけど、いちいちADOに書き換えるのが大変だよ・・・。
   ・データ件数の少ないテーブルをちょっと扱うだけ出し、ADOよりDAOの方が手軽だって聞いたことがあるんだけど・・・。
      (DAOのが小規模開発向きっておっしゃる方もいらっしゃいますね。わたしはどちらでもいいと思うんですけどね・・・)
   ・手元にある本にはDAOっていう書き方しか載ってないみたいだよ。

などなど、いろいろご事情があると思います。
なかなか、新規に習得された技術だけでお仕事なさるのは難しいですよね。

Access2002でも、DAOを参照することはできます。
下のほうずーっとスクロールして、探してみてください。

Microsoft DAO 3.6 Objectsっていうのがあると思います。これがDAOです。
これにチェックを付けて、優先順位をADOより上に上げておけば、DAOでプログラミングしたコードも、そのまま動くと思います。

単に、Access2002の初期インストールの状態なので、後から付け足したDAOでも、ちゃんと機能します。
特に問題は起こらないです。

Windows上での開発、プログラミングは、コードが書けるようになっただけではどうしようもありません。
こんなふうに、プログラミング上の各コマンドやメソッドなどがちゃんと動作するための「参考資料」が適時参照できないことにはどうしようもないのです。つまり、私たちは、プログラミングにより詳しくなろうとしたら、コードを書くばかりではなくこうしたファイル構造がどうなっているのか、シッカリ理解していかなければなりませんのです。

でも、これ、シッカリ理解しようとすると、けっこう大変です。
あんまり分かりやすく書いてある書籍とかも、ないので、それなりに腹を据えて取り組まないと・・・。

当面、こんなことにはこだわらずに、MS-Access2002の中だけで、コードの書き方を理解することに専念されるのがいいんじゃないかなぁって思うんですけどね・・・。でも、ネットでいろいろ情報検索してると、ADOがどうだ、DAOがなんだ、みたいに、なにやら難しそうな言葉のやり取りが目に付いて、ついつい焦ってしまって・・・。という方も、いらっしゃるんじゃないかと思います。
でも、はじめから世界を広げてしまうと、かなり苦しいんじゃないかとも思いますので・・。



さてさて。
ここまでお読みいただけて、いかがでしたでしょうか。
ずいぶんと初歩的な内容で、退屈された方もいたのでは・・・でも、ここまで読み進めていただけて感謝です。

多分、ここまでお付き合いいただけた方なら、VBAのコードを見ることには、あまり抵抗を感じなくなったのではないかと思います。
もちろん、すべてお話できたわけではアリマセンから、意味の分からないこともたくさんあると思いますけれど、でも、分からない単語は調べればいいんだし、Doって書いてあったら、下のほうにLoopって書いてあるはずで、その間をループするんだな、とか、Ifって書いてあったら、何か条件が分かれるんだな、とか。。。ポイントは結構絞れるようになられたのでは・・・と思っています。
分からない単語や関数が出てきたら、ヘルプ見れば載ってます。ヘルプじゃちょっと物足りないなぁと思ったら、VBAの専門書をひとつ手に入れて開いてみるとか、イミディエイトウィンドウを使ってテストしてみるとか・・・。一発で解読できなくても、別にかまわないんだなってこと、理解いただけたんじゃないかと思います。

そして、決して上級者テクニックではなく、単にMS-Accessの中での「手段のひとつ」に過ぎないと。。。。
身構えて「覚えなきゃ、覚えなきゃ」と思うものでもないのだと、いうこと・・・。
もう、市販の書籍を開いても、「何が書いてあるのかさっぱり・・・」とは、思わなくなられたのではないでしょうか。

わたしはこのコーナーで、身になることはお話してません。
すべては「たいしたことないんだから、抵抗持たずにトライしてみて」という精神で進めてまいりました。
必須ではないけれど、「手段」はたくさんあったほうが選べるし、クエリもマクロもVBAも理解できていれば、もっといいシステム作りにつながっていくと思います。

いちおう、「VBAの沼」のメインフェーズは、ここでオシマイです。
長いことお読みいただけて、感謝してます。ありがとうございます。
これより先のこと(もっと専門的/実践的なこと)は、専門の書籍を手にとって、基本を学習なさっていって下さい。
(お薦めの書籍を教えてください、とかいうQuestionはナシですよ。何のためにここまでお話してきたかわからんちゅーねん。皆さんが読みやすいと思う本を探して、手に取ってくださいね。こういうこと人に聞いても、理解しやすさは人それぞれですからね・・・)

「VBAの沼」は、今後は、「特に役に立たないけど面白そうなネタ」を見つけて、何かコンテンツを増やしていこうかな、と思っています。
なので、コーナーとしてはまだまだ続けてまいります。
では、また、小ネタをご用意してまいりますので(今までのも全部小ネタだけど)、その日まで・・・。