Access

【AccessVBA】ADOとDAOを使ってレコードセットを読み書きする方法

レコードセット

AccessのVBAでレコードを操作したいときに利用するレコードセット。

レコードセットを使ってデータベースを読み書きする方法はADO接続とDAO接続があります。

ADO・DAOどちらを使うべきか

古くから実装されているのがDAOで、後発の接続方法としてADOが利用できるようになりました。

DAOもAODもほぼ同じことができるので基本的には処理速度が速い方がいいですよね

一般的には以下のように言われています。

Accessのテーブルを操作する場合はDAOの方が速い

その他のDBへ外部接続したテーブルを操作する場合はADOの方が速い

DAOはAccessのJETエンジンに特化した接続であるため、ACCESSのテーブルへのアクセスがADOより高速です。

しかし、高速と言っても若干高速ぐらいですので、やりやすい方法で実装し実際の検索があまりにも遅い時にチューニングとしてDAOとAODを切り替えてみるというレベルで良いのでは?と思います。

そもそも極端に遅い場合はDAOだ、ADOだという前にSQLの構成に問題がある場合もありますので・・・。

ADO,DAOのレコードセットの使用方法

今回は顧客テーブルから誕生月が3月ユーザーを検索してプレゼント発送日を更新するという処理を想定してみました。

要するに検索+更新のレコードセット操作方法です。

DAO接続によるレコードセット操作

ADO操作によるレコードセット操作

ADO接続の場合、参照設定が必要です。

参照設定されていない場合、実行時以下のエラーが表示されます。

参照設定エラー

ツールの参照設定から、【ActiveX Data Objects x.x Library】にチェックを入れてください。(お使いの環境において最新のライブラリーにチェックしてください)

ADO参照設定

※1 ADOのOpenメソッドのロックタイプ規定値は読み取り専用(adLockReadOnly)となっていますので、adLockOptimisticを指定する必要があります。

参考:Microsoft公式サイト

ADOとDAOの違いで気を付ける点

編集前のeditコマンド

DAOの場合、レコードを更新する際は事前に.editコマンドで編集することを宣言する必要がありますが、ADOの場合は不要です。

取得したレコードセットからデータを抽出する方法

その他、一旦取得したレコードセットからさらにデータを抽出する方法としてfindコマンドがありますが、DAOの場合は複数のフィールドに対して条件を指定できますがADOで指定できる条件は1つだけです

このため複数の条件を指定したい場合はADOの場合filterプロパティを使用します。

通常、条件を指定してレコードセットを取得するものですが、それなりの事情があって一旦取得したレコードセットからさらに絞り込む場合です。

レコードセットの検索
【AccessVBA】レコードセットからデータを検索する方法(find or filter)ADOやDAOで取得したレコードセットからデータを絞り込んで検索する方法にはfindコマンドを使う方法があります。 ただ、ADOで...
ABOUT ME
アズビーパートナーズ
アズビーパートナーズ
プログラマーと社内SEとしての経験を活かして、 情報システム部門のご相談を承ります。 得意な分野はAccessによる短納期開発、 BIツール(QlikSense/QlikView)の開発です。 現在はCMSを利用したホームページの作成にも力を入れています。
今のスキルのままで大丈夫?

あなたのスキル。今のままで大丈夫ですか?

時代のニーズに合った開発スキルを身につけてあなたの価値を高めましょう。

\オンラインでも教室でも学べるおすすめのスクール/

TECH::CAMP(エンジニアスクール)

まずは基礎から・・・という方はProgateUdemyどっとインストールなどがおすすめ!

スキルアップについて詳しくはこちら