DAOで使用するRecordsetついて掲載します。
Recordsetとは、テーブルをレコード単位で操作できるオブジェクトです。Recordsetでレコード数やフィールド名などが取得できたり、レコード間を移動することなどができます。
Recorsetの種類
- テーブルタイプ : テーブルのレコード。レコードのデータを編集できます。編集結果はテーブルに反映されます。
- ダイナセットタイプ : クエリのレコード。レコードのデータを編集できます。編集結果はクエリ内のテーブルに反映されます。
- スナップショットタイプ : クエリの実行結果のレコード。レコードのデータは編集できません。
Recordsetの構文
Set recordset = database.OpenRecordset (Name, type, options, lockedits)
- recordset : Recordset型のオブジェクト変数を指定
- database : Database型のオブジェクト変数を指定
- Name : テーブル名かクエリー名
- type : (省略可能) Recordsetの種類
- options : (省略可能) Recordsetの特性を指定する定数
- lockedits : (省略可能) Recordsetのロック状態
● typeの定数
- dbOpenTable : テーブルタイプのRecordsetオブジェクト
- dbOpenDynaset : ダイナセットタイプのRecordsetオブジェクト
- dbOpenSnapshot : スナップショットタイプのRecordsetオブジェクト
- dbOpenForwardOnly : 前方スクロールタイプのRecordsetオブジェク
● optionsの定数
- dbAppendOnly : (ダイナセット)レコードの追加はできるが、編集および削除はできない
- dbSeeChanges : (ダイナセット)編集中のデータを他のユーザーが変更しようとした場合にエラーが発生
- dbDenyWrite : (テーブル・ダイナセット・スナップショット・前方スクロール)他のユーザーはレコードの修正や追加できない
- dbDenyRead : (テーブル)他のユーザーはテーブルのデータの読み取りはできない
- dbForwardOnly : (スナップショット)前方スクロール タイプのRecordset オブジェクトを作成
- dbReadOnly : (テーブル・ダイナセット・スナップショット・前方スクロール)他のユーザーはRecordset の変更はできない
- dbInconsistent : (ダイナセット・スナップショット)矛盾を許す更新が可能
- dbConsistent : (ダイナセット・スナップショット)一貫性のある更新のみが可能
● lockeditsの定数
- True : (既定値)排他的ロックが有効
- False : 編集する場合共有的ロックが有効
● Recordsetでテーブルのレコード数を求めるVBA
イミディエイトウィンドウに結果を表示しています。
Set rs = Nothing はオブジェクト変数を開放するコードです。
メモリが開放されるわけではないので必ずしも必要ではありませんが、プログラムが分かり易くなるので、癖として行った方がいいように思います。
Sub MyRecordSet()
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb()
Set rs = db.OpenRecordset("T-顧客マスター", dbOpenTable)
Set rs = db.OpenRecordset
Debug.Print "レコード数: " & rs.RecordCount
Set rs = Nothing
Set db = Nothing
End Sub