<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000--VBAの小屋>ADOとはなんや
   1 2 3 4



え?こんなのがVBAだなんて、なんかピンとこない?え?こんなのがVBAだなんて、なんかピンとこない?
うーむ。そうですか・・・。
やっぱみなさん、VBAっていうと、もっと大掛かりな処理とかすごく難しいことを連想されるんでしょうか。
確かに、難しいものではあるのかもしれません。
でも、決して取り違えないでくださいね。データベースを作っていくための手段のひとつに過ぎないのだということを。
「VBAでやれば高度なことができる」と思い込んでしまっていると、お話がややこしくなりがちです。

MS-Accessで作ったデータベースの中には、いろいろなオブジェクトが存在していますよね。
  テーブルを作ったり
  クエリを作ったり
  フォームやレポートを作ったり・・・。
  テーブルの中にはフィールド名と呼ばれる、さらに細かいパーツが存在していることになります。
  フォームやレポートの中にも、コントロールという総称を持つ、いわゆるテキストボックスやラベル、コンボボックスなどが存在します。

で、それらはお互いに、「名前」で結びつきあいます。全部名前がついていますよね。
たとえばクエリを作るとき・・・テーブルの名前を一覧から選ぶことで、そのテーブルの中のレコードを自由にクエリ上で扱うことができるようになるわけです。わたしたちが承知していればいいのは、わたしたちが作ったテーブルやクエリの名前です。

しかし、VBAで、テーブルの中のレコードを扱いたい場合は・・・。
どのデータベースのどのテーブルの中のデータをどういうふうに取り出してきてどう扱うのか・・・ということをこと細かに書き記してやる必要があるのです。たとえ、すぐそこにある小さなテーブルであったとしても、きちんと書き記してやらなければ処理の対象にはなりません。処理の対象にならないどころか、処理自体行われません。
MS-Accessではふつう、各オブジェクトやコントロールを「名前」で呼び合えば済むのに、VBAで作成したプロシージャの中からだと、データベースの構造体そのものを記述しなければならないわけです。

パソコンで動くデータベースソフトといえど、ひとたびデータベースの構造体の中となるとかなり複雑です。また、Accessのバージョンが新しくなるにつれて、より高度で高速なデータベースを実現するために、内部構造も少しずつ変わってきています。

データベースの中のいろいろなオブジェクトがどういうふうになっているのか、どういう構造になっているのかを記してあるオブジェクトのことをライブラリと呼びます。これによって、VBAのコードの中でどういう書き方をすればテーブルの中のデータを扱わせてもらえるか・・・ということが決まります。オブジェクトライブラリの種類が変われば、VBAでのコードの書き方も変わるのです。

たとえば、すし屋に行って、おすしを注文するときに、まあだいたいお品書きを見ますよね。
お品書きに「まぐろ、いか、うに、はまち、しゃこ、あまえび」と書いてあったら、「まぐろとあまえびちょうだい」という注文の仕方になります。「松、竹、梅」と書いてあったら、「竹を2人前ね」という注文の仕方になります。「ネタ、しゃり、あがり」と書いてあったら、「しゃりにネタ乗せて」という頼み方になります。
親方がどういう仕入れをしていて、今この店の中にどういうさかながあるのかということとは別の話で、わたしたちはまずお品書きを見て、その店のシステムを知って、そして食べたいおすしを注文していくのです。

そのお品書きのような役割をするのがライブラリです。
正確にはちょっと違うかも・・・お品書きと、お品書きを見ながら親方に注文を言うまでの経路をひっくるめて・・・という感じになるかもしれません。実際にはもっともっと複雑なんですけど、目に見えるものでもないし・・・そんな感じで捉えていればオッケーなんじゃないかと思います。

Access97では、DAO(DataAccessObject)というライブラリが使われていました。97ではこのDAOに基づいたコードの書き方をしていましたが、Access2000ではADO(ActiveXDataObject)というものに取って代わりました。つまり、同じテーブルを扱おうとした場合でも、DAOの時とちょっと書き方が変わってるんです。
それに伴って、テーブルの中のレコードを操作する際の書き方とかもちょこっと変わります。

ADOとDAOは、名前は似てますけどまったくぜんぜん違うものです。
VBAで自分でコードを書いて処理を作るということは、こういうことも少々覚悟しておかなければなりません。

MS-Access2000のヘルプで、DAOと「質問」欄に入力して検索すると、いくつか情報が得られます。「DAOコードの変換例」などを見ると、Accessのバージョンによってだいぶ変わってきているな・・・ということがわかります。いちおう、この辺のヘルプ、ひととおり目を通しておかれるとよいでしょう。

VBAというのは、Accessの機能ではありません。Accessのオブジェクトを操作するための、プログラミング言語なのです。
フォームの中のコントロールやちょっとした処理を実行するためのプライベートプロシージャを作る場合ならまだしも、テーブルやクエリなどのオブジェクトを扱うプロシージャを作るには、いろいろ心得ておかなければならないことがありそうですね。

いちおう、ADOの特徴というか長所を、Windows系の開発書などの中で探してみると、DAOよりも扱いやすくさらに大規模なデータを扱うのに適している、と書かれていることが多いです。そういう意味ではこれからのデータベースに不可欠な機構なのかもしれません。

まだわたしも、Access2000を使い始めて日が浅いし、正直申しまして97で作ったdbをそのまま2000で動かしているような状態なので、ADOを意識したVBAプロシージャというのはほとんど作ったことがありません。市販されているVBA関係の書籍でも、実際のサンプルコードはDAOだったり、まだあんまり浸透してないのかな・・・というのが正直な印象です(今は2000年の8月です)。




じゃあ、ちょっとしたプロシージャ作ってみて、どんな感じか雰囲気見ていただきたいと思います。
たとえば、こんな感じのテーブルがあったとします。名前は「テーブル」です。レコード7件入ってます。

目でみて数えればいいんですけど、このテーブルの中のレコード件数を数えるプロシージャを作ってみましょう。

データベースウィンドウの「モジュール」というところをクリックし、↓「新規作成」ボタンをクリックします。



ちょっと雰囲気違うかもしれませんけど・・・とにかく、VisualBasicのエディタが現れますね。
ここにコードを書くってとこは、プライベートプロシージャとおんなじです。

左上のツールボタンを見てください。

ここ↑クリックして、「プロシージャ」を選ぶと、プロシージャの追加ダイアログが出てきます。
「名前」というところに、なんかてきとうな名前を付けましょう。

何でもいいですけど、既に存在する関数名とか、テーブル名とかはやめた方がいいですね。頭に一文字自分の頭文字をつけるとか、なんか工夫してみてください。
こうなりますよね。↓

これもプライベートプロシージャの時と同じで、N_cntっていう名前のプロシージャですよ、っていう内容になります。
ただ、先頭にPrivateってついてないですよね。こういうのをPublicプロシージャといって、とりあえずこのデータベースの中ならどこでも自由に使うことができるプロシージャってことになります。



では!参りましょう!1行ずつちまちま見ていきますね。