2016
8
19

AccessVBAでSQLを書いてレコードを抽出・フィールドを取り出す

Accessってテーブルとフォームが連結しているので、VBAなしでも結構いけるんだなと思っていたんですが、ちょっと複雑なことをしたいとか、存在チェックとか、やっぱりやりたいよなーと思ったのでメモ。


DAOとADOの違いについて

160819-1

ざっくり言うと、どちらも「データベースへ接続する手段」なんですが、DAOはAccessのデータベースのみに特化していて、ADOはAccessをはじめ、SQLServerやOracleなど、他のデータベースでも幅広く使える接続手段、という感じです。

一時はDAOは古い手段とされて「これから作るならADO!」という風潮だったそうなのですが、Access2007からDAOの参照先が新しくなり、そのライブラリが既定で参照されるようになったという流れがあり、今はそんなに廃れていない印象です。

「既定で参照しとくから気軽に使ってね!」という解釈をすると、ローカルで自分自身のデータベースを操作するならDAOを使って、外部のデータベースを使いたいときはADOを使う、という感じでいいんじゃないのかなー、と思います。DAOはAccess特化なのでADOよりちょっと速いとか。

でも、速いと言ってもPCのスペックもどんどん上がっている現在、そんなに気にすることもないのかと。ちょっと触った感じ、レコード読込だけならあんまり感じませんが、追加や更新の書き方に結構クセがあるので、既にADOの書き方に慣れちゃってると、ちょっと戸惑う…。あえて使い分けなくてもADOで統一しちゃうという考え方もあるかもしれません。

一応、個人的なテンプレとしてDAOとADOのレコード読込の書き方をまとめてみました。

コード

DAOでの書き方

2007より前のバージョンでは参照設定の「Microsoft DAO *.* Object Library」にチェックをつけなきゃいけなかったのですが、2007より「Microsoft Office *.* Access Database Engine Object Library」と新しくなり、既定でチェックがついているので、Access2007以降であれば、特に何もしなくても下記のコードを書けば動きます。

2~4行で宣言、6~8行でレコード抽出、10~13行で存在チェック、15~18行が処理部分、20行以降が後処理となっています。

レコードが存在しなかったら12行目から20行目へジャンプして後処理しちゃいます。

16行目はサンプル的にイミディエイトウィンドウにフィールドを取り出すようにしていますので、ここをいろいろ変えてもらえれば。イミディエイトウィンドウが出ていない場合はツールバーの「表示」から出せます。

24~26行目の Nothing の処理はなくても良いみたいですね。なんとなく Set~Nothing はセットのような気がして一応書いてみたのですが。

ADOでの書き方

ADOは既定で参照設定がされていないので、「Microsoft ActiveX Data Objects *.* Library」という項目にチェックを入れてから利用します。

ADOを使う場合、参照設定を省略することもできます。

こちらは、2~4行で宣言、6~9行でレコード抽出、11~14行で存在チェック、16~19行が処理部分、21行以降が後処理となっています。ちょっと書き方が違うだけで、接続しちゃえば扱い方はだいたい一緒なので、解説は上記をご覧ください。

以上です! 自分メモですがどなたかのお役に立てたら幸いです。

参考

ありがとうございました!

書籍を執筆しました。

  • このエントリーをはてなブックマークに追加
  • follow us in feedly 618
  • RSSを登録

公開日:2016/08/19
更新日:2016/09/08


コメントを残す




*印は必須項目です。コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にですがスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)


back to top