0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Access VBAにおけるADOについて【レコードの取得】

Last updated at Posted at 2025-08-04

ADOは「ActiveX Data Object」の略で、データベースを操作するためのさまざまなオブジェクトを持つオブジェクトライブラリです。ADOの持つさまざまなオブジェクトを組み合わせることで、データベースを自由に操作することができます。
SQL Server、Oracle、Excelファイルなど、Access以外の外部データベースも同様に操作が可能となります。

本記事では主に、レコードの取得に絞って解説していきます。

データベース操作の主な流れ

  1. データベースに接続する
  2. レコードの取得を行う
  3. 取得したレコードへの検索や追加・更新・削除など、データベースの操作を行う
  4. データベースへの接続を解除する

※AccessでADOを利用するには、「参照設定」ダイアログボックスで「Microsoft ActiveX Data Objects X.X Library」(X.Xはバージョン番号)への参照設定が必要です。

ADOで使用するオブジェクト

ADOでは主に次のオブジェクトによって構成されています。

オブジェクト名 説明
Connection データベースへの接続を保持するオブジェクト
Command データベースへのコマンドを保持するオブジェクト
Recordset レコードの集まりを保持するオブジェクト
Field フィールドを保持するオブジェクト
Parameter パラメータを保持するオブジェクト
Property プロパティを保持するオブジェクト
Error エラーを保持するオブジェクト

データベース操作で使用するオブジェクト

Recordsetオブジェクト

Recordsetオブジェクトとは、レコードセットを操作するためのオブジェクトです。Recordsetオブジェクトの主なプロパティとメソッドは、以下となります。

プロパティ 定数 説明
BOF カレントレコードが先頭レコードの前にある時はTrueを、それ以外はFalseを返す
EOF カレントレコードが最終レコードの後にある時はTrueを、それ以外はFalseを返す
RecordCount レコード件数を返す
CursorType カーソルタイプを返す
adOpenForwardOnly(既定) 前方スクロールカーソル
レコードを前方向にのみ移動することができ処理が高速。その他は静的カーソルと同じ働きをする
adOpenKeyset キーセットカーソル
他のユーザーによる追加・削除は確認できない。その他は動的カーソルと同じ働きをする
adOpenDynamic 動的カーソル
レコードを全ての方向に移動することができる。他のユーザーによる追加・更新・削除を確認できる
adOpenStatic 静的カーソル
レコードを全ての方向に移動することができる。他のユーザーによる追加・更新・削除を確認できない
CursorLocation カーソルの場所を指定する
adUseServer(既定) サーバー側のカーソルを使う
adUseClient クライアント側のカーソルを使う
LockType ロックタイプを返す
adLockReadOnly(既定) 読み取り専用
adLockPessimistic レコード単位の排他的ロックを表す
adLockOptimistic レコード単位の共有的ロックを表す
adLockBatchOptimistic 共有的バッチ更新を表す
adLockUnspecified ロックタイプを指定しない
Bookmark レコードを識別するためのブックマークを表す

メソッド 説明
Open レコードセットを開く
Close レコードセットを閉じる
Move/MoveFirst/
MoveLast/
MoveNext/
MovePrevious
カレントレコードを移動する
Find レコードを検索する
Clone レコードセットのコピーを作る
AddNew レコードを追加する
Update レコードを更新する
Delete レコードを削除する

カレントレコードとはレコードセットの中で、現在操作の対象となっているレコードを指します。レコードセットは同時に複数のレコードを参照できないため、このカレントレコードを移動させながら複数のレコードを操作します。

レコードセットを取得するには、主に以下の方法があります。

①RecordsetオブジェクトのOpenメソッドを使う

Dim rs As ADODB.Recordset
Set rs = NEW ADODB.Recordset
rs.Open "ソース", cn, "カーソルタイプ", "ロックタイプ"

Openメソッドの引数については、以下の通りです。

  • ソース: テーブル名、クエリ名、SQLステートメントなどを指定
  • cn: Connectionオブジェクトを指定
  • カーソルタイプ: カーソルタイプを指定。CursorTypeプロパティの定数を指定する
  • ロックタイプ: ロックタイプを指定。LockTypeプロパティの定数を指定する

以下のように、オブジェクト変数の宣言とインスタンスの生成を一度に行うことも可能です。

Dim rs As NEW ADODB.Recordset
rs.Open "ソース", cn, "カーソルタイプ", "ロックタイプ"

引数に関しては、あらかじめRecordsetオブジェクトのプロパティに設定してから、Openメソッドを実行することも可能です。

Dim rs As NEW ADODB.Recordset
rs.ActiveConnection = cn
rs.Source = "ソース"
rs.CursorType = "カーソルタイプ"
rs.LockType = "ロックタイプ"
rs.Open

②ConnectionオブジェクトのExecuteメソッドを使う

Dim rs As ADODB.Recordset
Set rs = cn.Execute("コマンド")

Executeメソッドのオブジェクトと引数については、以下の通りです。

  • cn: Connectionオブジェクトを指定
  • コマンド: テーブル名、クエリ名、SQLステートメントなどを指定

今回はRecordsetオブジェクトでなくConnectionオブジェクトのメソッドを使用するため、特に「NEW ADODB.Recordset」と記述する必要はありません。

ConnectionオブジェクトのExecuteメソッドの結果をRecordsetオブジェクトで取得した場合、レコードセットは常に前方スクロールカーソルの読み取り専用となります。また、Executeメソッドでアクションクエリを指定した場合、特に結果は返らず、指定したアクションが実行されるのみとなります。その場合は、レコードセットのオブジェクト変数は使用せずに、以下のように記述します。

cn.Execute コマンド

まとめ

本記事では、Access VBAにおけるADOについて、レコードの取得をメインに説明してきました。
レコードセットを取得する方法は2種類あり、Openメソッドを使う方法と、ConnectionオブジェクトのExecuteメソッドを使う方法があります。
ConnectionオブジェクトのExecuteメソッドを使って取得した場合、レコードセットは常に前方スクロールカーソルの読み取り専用となります。そのため、レコードを全方向に動かしたいなど柔軟に操作したい場合はOpenメソッドを使う方法が良いかと思います。

以上がレコードの取得についての解説でしたが、次回からは取得したレコードセットを実際に操作していく方法について書いていこうと思います!

参考文献

  • VBA エキスパート 公式テキスト 「Access VBA スタンダード」 武藤 玄
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?