たま氏の覚え書き

KNIME・AccessVBA・Swift等、学習したことを覚え書き

AccessVBA_ADOの利用_レコード操作その1【Recordset】書式・メソッド・プロパティ

ADOでデータベースに接続し、レコードを操作するためにRecordsetでデータベースをOpenする記述

Recordsetオブジェクトの利用

知っておきたい前提事項

カレントレコード(操作対象)のみを参照するため、一度に複数のレコードを操作することはできない
複数レコードに対して操作する場合には、loop処理を使用してカレントレコードを移動させる
※例えばSQLを使用してある程度対象レコードを絞ってから、Recordsetを使用してレコードを操作することも可能
Recordsetを開いた際にカレントレコードは先頭レコードに設定されている

利用の流れ

・Recordsetオブジェクトのオブジェクト変数を宣言 ・オブジェクト変数にRecordsetオブジェクトのインスタンスを生成
・RecordsetオブジェクトのOpenメソッドまたはConnectionオブジェクトのExecuteメソッドで

Recordsetオブジェクトのメソッドとプロパティ

プロパティ

カレントレコードの位置を取得して条件分岐に使用する等で使われるプロパティ

BOF_カレントレコードが先頭レコードの前に位置していればTrue、そうでなければFalse
EOF_カレントレコードが最終レコードの後に位置していればTrue、そうでなければFalse
Recordcount_レコードの件数を返す
Bookmark_設定したフィールドを保持

▼bookmarkの記述例▼
アクセスVBA講座_ADO_レコード移動
「03.Bookmarkプロパティ」参照

主にOpenメソッドの引数として使われるプロパティ

CurorType_カーソルタイプ(カレントレコードを動かす向きをどうするか)
 ∟adOpenFowardOnly※規定値_前方スクロール、前方向のみに移動、ほかのユーザの追加や更新・削除の確認はできない
 ∟adOpenStatic_全方向に移動することができる、ほかのユーザの追加や更新・削除の確認はできない
 ∟adOpenKeyset_全方向に移動することができ、ほかのユーザの追加や更新・削除の確認はできない
 ∟adOpenDynamic_全方向に移動することができて、ほかのユーザによる追加や更新・削除の確認もできる
LockType_ロックタイプ(レコード単位の編集の可否)
 ∟adLockReadOnly※規定値_読み取り専用
 ∟adLockPessimistic_排他的ロック
 ∟adLockOptimistic_共有的ロック
 ∟adLockBatchOptimistic_共有的バッチ更新
 ∟adLockUnspecified_ロックタイプ指定なし

※排他的ロック・共有的ロックとは何かについては用語解説ページ側に記載

▼AccessVBA_用語集【基礎】▼
tama-shi.hatenadiary.com

▼ロックタイプについてより深く知りたい場合▼
https://www.itmedia.co.jp/help/howto/win/win2000/0007special/complus_vb/chap1/05.html


メソッド

Open_レコードセットをひらく
Close_レコードセットをとじる
Move_カレントレコードを移動
 ∟MoveFirst / MoveLast / MoveNext / MovePrevious
Find_レコードを検索
Clone_レコードをコピー
Update_レコードを更新
Delete_レコードを削除
AddNew_レコードの追加


レコードセットを使用する際の書式

データの名称 箇所には テーブル名・クエリ名・SQLステートメント等を記載

RecordsetオブジェクトのOpenメソッドで開く場合の記述1

書式:
Dim オブジェクト変数1 As ADODB.Connection 'Connectionオブジェクトのオブジェクト変数を宣言
Dim オブジェクト変数2 As ADODB.Recordset 'Recordsetオブジェクトのオブジェクト変数を宣言
Set オブジェクト変数1 = CurrentProject.Connection 'インスタンスを生成
Set オブジェクト変数2 = New ADODB.Recordset 'インスタンスを生成
オブジェクト変数2.Open データの名称 , オブジェクト変数1 , カーソルタイプ , ロックタイプ

RecordsetオブジェクトのOpenメソッドで開く場合の記述2

Openメソッドの引数をRecordsetオブジェクトのプロパティに設定するパターン
書式:
Dim オブジェクト変数1 As ADODB.Connection 'Connectionオブジェクトのオブジェクト変数を宣言
Dim オブジェクト変数2 As ADODB.Recordset 'Recordsetオブジェクトのオブジェクト変数を宣言
Set オブジェクト変数1 = CurrentProject.Connection 'インスタンスを生成
Set オブジェクト変数2 = New ADODB.Recordset 'インスタンスを生成
オブジェクト変数2.ActiveConnection = オブジェクト変数1
オブジェクト変数2.Source = データの名称
オブジェクト変数2.Open

ConnectionオブジェクトのExecuteメソッドで開く場合の記述

取得したレコードセットは常に読み取り専用の前方スクロールカーソルとなるので注意
書式:
Dim オブジェクト変数1 As ADODB.Connection 'Connectionオブジェクトのオブジェクト変数を宣言
Dim オブジェクト変数2 As ADODB.Recordset 'Recordsetオブジェクトのオブジェクト変数を宣言
Set オブジェクト変数1 = CurrentProject.Connection 'インスタンスを生成
Set オブジェクト変数2 = オブジェクト変数1.Execute(コマンド) 'インスタンスを生成
※コマンド には、データの名称を入力
※この記述方法で、アクションクエリの指定も可能(オブジェクト変数1.Execute コマンド)

上述の書式を使用した実践編は以下の記事を参照
▼Recordsetその2▼
tama-shi.hatenadiary.com