13.1 VBAとADOを使ってデータベースへアクセス
テーブル、フォーム、レポートなどが完成したところで1秒でも早くフォームから入力ができるようにしたい所ですが、その前にVBAを使ってどのようにテーブルの読み書きをするのかを説明したいと思います。以下の内容を読破した上で次の章へ進んでください。ちなみに、ここの章ではまだモジュールを作ったりはしません。


本節では、ADOを使ったプログラミングの要点のみを解説しています。ADOについての詳しい解説やサンプルは、「ADO超入門」や「ADOレコードセットの作成と操作」を参照してください。


注:このページは、旧コンテンツでのブックマーク登録を救済するためのページです。リニューアル前の内容をそのまま掲載しているため、現行の「住所録アプリの作成」との関連性や互換性はありません。今後、現行の住所録アプリに合わせた内容にリニューアルする予定です。
データベースを使うにはADOが基本
VBAを使ってデータベースへアクセス(テーブルの読み書き)を行うときは、ADO(ActiveX Data Objects)というオブジェクトを使います。これは、OLE DBを使うためのインターフェースで、早い話がRDBを使ったり、XLSやCSVをRDB感覚で使ったりなど、色々なデータソースを同じインターフェースで超簡単に扱うためのするための機能です。
データベースのオープンとクローズ
アドレス帳ツールでは、テーブルとVBAコードをMDB内に同居させます。このようなケースでテーブルを扱う場合は、最初にADODB.Connectionオブジェクトの作成から始めましょう。

作成は超簡単で、Set命令を使いADODB.Connection型の変数へApplication.CurrentProject.Connectionをセットするだけです。

■記述例

  Dim objADOCON As ADODB.Connection
  Set objADOCON = Application.CurrentProject.Connection

■解説
Dim objADOCON As ADODB.Connection

ADOコネクションオブジェクト変数の宣言です。例では変数名をobjADOCONという名前にしていますが、ここは好きな名前でかまいません。型にはADODB.Connectionを指定しましょう。
Set objADOCON = Application.CurrentProject.Connection

コネクションオブジェクトの作成を行います。なお、テーブルとVBAコードがMDB内に同居している場合は、この方法を使ってコネクションを行います。ここまでが完了すると、あとはobjADOCONを使ってデータベースを扱うことができます。

次にクローズです。閉じるときは、ADOコネクションオブジェクトのCloseメソッドで行います。また、使い終わったコネクションオブジェクト変数は、Nothingをセットしクリアしてください

ちなみに、クローズしてもMDBが閉じてしまうわけではありません。使い終わった変数を片づける意味でのクローズですのでご安心を。

■記述例

  objADOCON.Close
  Set objADOCON = Nothing

■解説
objADOCON.Close

データベースのクローズです。オープンしたら、必ずクローズしましょう。
Set objADOCON = Nothing

コネクションオブジェクトのクリアを行います。使い終わったコネクションオブジェクトにはNothingをセットしクリアしておきましょう。
SQLの実行方法
テーブルからデータを読み込んだり、テーブルへデータを書き込んだりするときはSQLを使って行いますが、今度はADOを使ってSQLを実行する方法です。SQLを実行するときは、ADOコネクションオブジェクトのExecuteというメソッドを使って行います。

SQLには、実行した結果を返すもの(SELECT命令)と、実行結果を返さないもの(INSERT、UPDATE、DELETEなど)の2種類ありますが、まずはSELECT命令の実行方法と結果の取得方法です。

SELECT命令を実行すると、取り出した(読み込んだ)全てのレコードはレコードセットという形で返り、さらにレコードセットをADODB.Recordset型の変数へセットすることでデータとして扱えるようになります。また、レコードセットを作成した場合は、最後にCloseメソッドを使ってレコードセットのクローズと、最初にNothingをセットし、レコードセット変数のクリアを行いましょう。

■記述例

  Dim objADOCON As ADODB.Connection
  Dim objADORS  As ADODB.Recordset

  Set objADOCON = Application.CurrentProject.Connection
  Set objADORS = objADOCON.Execute("SELECT * FROM アドレス帳テーブル")

  objADORS.Close
  objADOCON.Close

  Set objADORS = Nothing
  Set objADOCON = Nothing

■解説
objADORS  As ADODB.Recordset

ADOレコードセットオブジェクト変数の宣言です。例では変数名をobjADORSという名前にしていますが、ここは好きな名前でかまいません。型にはADODB.Recordsetを指定しましょう。
Set objADORS = objADOCON.Execute("SELECT * FROM アドレス帳テーブル")

SQL(SELECT)を実行し、その結果(レコードセット)をレコードセット型の変数「objADORS」へ保存します。SELECT命令の実行結果は、変数objADORSを使って扱います。
なお、実行するSQLはExecuteの引数へ文字列で指定します。
objADORS.Close

レコードセットのクローズです。レコードセットを使い終わった、必ずクローズしましょう。
Set objADORS = Nothing

レコードセットのクリアを行います。使い終わったレコードセットオブジェクトにはNothingをセットし必ずクリアしておきましょう。

次に、実行結果を返さないSQL(INSERT、UPDATE、DELETEなど)を実行する方法です。同じく、Executeで実行しますが、レコードセットを返さないためレコードセットオブジェクト変数は使いません。

■記述例

  Dim objADOCON As ADODB.Connection
  Set objADOCON = Application.CurrentProject.Connection

  objADOCON.Execute("UPDATE アドレス帳テーブル SET 漢字氏名 = '聖徳太子'" & _
                     " WHERE レコードキー = 1")

  objADOCON.Close
  Set objADOCON = Nothing

レコードセットを扱う
次に必要な知識は、レコードセットからフィールド値を取り出す方法や、レコードの順読み・読み込み終了判定方法など、レコードセットを扱う方法です。

というわけで、まずはレコードセットからフィールド値を取り出す方法から行きましょう!フィールドの指定は次のように行います。

レコードセットオブジェクト!フィールド名

または

レコードセットオブジェクト("フィールド名")

たとえば、objADORSというレコードセットの「漢字氏名」というフィールドの値を取り出す場合(例ではstrNameという変数へ保存)は、次のように記述します。なお、「※1」で指定しているValueは、付けても付けなくても、どちらでもOKです。

strName = objADORS!漢字氏名

または

strName = objADORS("漢字氏名").Value '※1
ADOを使ってMDBを扱うその他の技
ADOを使ってデータベースを扱う基本を簡単に紹介しましたが、ここで紹介したのはアドレス帳ツールで使用する機能だけです。ADOは、他にもレコードの順読み込みや読み込み終了判定、他のSQL ServerやORACLEなど他のデータベースを扱うなど、色々なことが行えます。

ここで紹介していないテクニックは、Access VBA Tipsの方で紹介していますので、ぜひ覗いてみて下さい。

Copyright(C) 1999-2014 結城圭介(Ver.3.51) All rights reserved