ACCESS VBA Recordsetの使い方

Recordsetの使い方

ACCESS VBAでテーブルの値をプログラムから操作する際に利用するのがレコードセットです。

テーブルとはどう違うの?と思われるかもしれません。

今回は、ACCESS VBAでのレコードセットの使い方をご紹介します。


こんにちは。
はこにわガジェット (@hakoniwagadget) です。

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。
この記事ではACCESSでのVBAの使い方をご紹介していきます。

レコードセットとは

レコードセットとは、ACCESS VBAでテーブルを操作する際に使用するオブジェクトです。

レコードセットのオブジェクト(変数のようなもの)に特定のテーブルを代入し、そのうえでレコードの追加、変更、削除などの操作を行うことができます。

そのため、VBAのプログラム上でテーブル操作を行う際には、レコードセットを使用することが必要になります。

なお、このレコードセットオブジェクトを使用するために前提として利用するのがADOです。

ADOとは

ADO(ActiveX Data Objects)とはマイクロソフトが提供する、データベースを操作するための様々オブジェクトの集合体です。
ADOを使うことでデータベースの操作が可能です。

ACCESSはもともとクエリ等のデータベースを操作する独自オブジェクトを用意していますが、ADOを使うことで条件分岐やループを含めたより柔軟なデータベースの追加、更新、削除が可能です。

ADOとよく似たものに、DAO(Data Access Object)があります。
ACCESSのデータベース接続に特化している点が特長で、ADO登場以前から使われています。

ただ、今後VBAプログラミングを行うならADOを使っておくほうが良いでしょう。
ADOとDAOはプログラミングの方法が若干異なりますので、混在すると複雑になります。

レコードセットを利用するための記述

レコードセットを利用するためには決まった記述方法があります。

変数の宣言

初めに、レコードセットを利用するためには、宣言処理が必要になります。

よく利用するのは以下のような記述です。


 Dim cnn As ADODB.Connection
 Dim rst1 As ADODB.Recordset

最初の行では、ADOを利用するために、cnnという名称のデータベースへ接続するためのConnectionオブジェクトを宣言します。

次の行では、rst1という名称のレコードセットオブジェクトを宣言します。

変数への代入

次に、宣言した変数に対して、オブジェクトを代入します。


 Set cnn = CurrentProject.Connection
  Set rst1 = New ADODB.Recordset
  rst1.CursorLocation = adUseClient

最初の行では、cnnに対して、カレントデータベース、つまり今開いているACCESSデータベースを設定します。

次の行では、rst1に対して、Recordsetオブジェクトのインスタンスを作成しています。

最後の行では、カーソルの位置をクライアントPCに設定しています。

このあたりはよくわからなければ、上記にコードをそのまま使用して問題ないでしょう。

レコードセットにテーブルを設定する

いよいよ、レコードセットにテーブルを設定します。

レコードセットにテーブルを設定する際はOpenメソッドを使って以下の記述を行います。

レコードセット名.Open 設定するテーブル名 , コネクションオブジェクト名 , カーソルタイプ , ロックタイプ

実際に、上記で作成したcnnコネクション上のrst1レコードセットに対して、「TRN_年月」というテーブルを設定する際の記述は以下になります。


 rst1.Open "TRN_年月", cnn, adOpenKeyset, adLockOptimistic

引数に設定している、カーソルタイプとロックタイプの意味は後述しますね。

レコードセットのパラメータ

レコードセットの取得の際のパラメータは、以下の通りです。

基本は、adOpenKeyset, adLockOptimisticにしておけば問題はないです。

ロックタイプに関しては、更新を行わないのであればadLockReadOnlyにしておく方が誤動作を防げます。

CursorType

adOpenForwardOnly前方スクロールカーソル。前方スクロールのみだが高速。検索を一度のみ実施する場合などに利用。
adOpenKeysetキーセットカーソル。他のユーザーによる追加・削除は確認できない。
adOpenDynamic動的カーソル。レコードをすべての方向に移動することができる。他のユーザーによる追加・削除が確認できる。
adOpenStatic静的カーソル。レコードをすべての方向に移動することができる。他のユーザーによる追加・削除は確認できない。

LockType

adLockReadOnly読み取り専用
adLockPessimisticレコード単位の排他的ロック
adLockOptimisticレコード単位の共有的ロック
adLockBatchOptimistic共有的バッチ更新
adLockUnspecifiedロックタイプを指定しない

以上、Recordsetの使い方をご紹介しました。


ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。

そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。

ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

最後までお読みいただき、ありがとうございました。