db.OpenRecordset は、Access VBA(DAO)でテーブル・クエリ・SQL文からレコードセット(データの集合)を取得するためのメソッドです。データの読み取り・編集・検索・ループ処理などに頻繁に使います。
目次
✅ 構文
Set rs = db.OpenRecordset(Source, [Type], [Options], [LockEdit])
✅ パラメータの意味
| 引数 | 必須 | 説明 | 
|---|
| Source | ○ | テーブル名、クエリ名、またはSQL文(文字列) | 
| Type | × | レコードセットの種類( dbOpenTable,dbOpenDynaset,dbOpenSnapshotなど) | 
| Options | × | オプション( dbReadOnly,dbSeeChangesなど) | 
| LockEdit | × | 編集のロックモード( dbOptimistic,dbPessimisticなど) | 
✅ よく使うレコードセットタイプ(Type)
| 定数名 | 内容・用途 | 
|---|
| dbOpenTable | 単純なテーブルアクセス用。更新可能。 | 
| dbOpenDynaset | テーブル・クエリ・SQLの結果を読み書き可で取得 | 
| dbOpenSnapshot | 読み取り専用(軽量・高速)。参照用途向き。 | 
✅ 例1:テーブルから読み取り(編集不可)
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("ユーザー", dbOpenSnapshot)
✅ 例2:SQLでフィルタして取得(編集可能)
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT * FROM ユーザー WHERE メール LIKE '%gmail.com%'", dbOpenDynaset)
✅ 例3:編集モードを指定して開く
Set rs = db.OpenRecordset("ユーザー", dbOpenDynaset, dbSeeChanges, dbOptimistic)
✅ オプション(Options)
| 定数 | 内容 | 
|---|
| dbReadOnly | 読み取り専用として開く | 
| dbSeeChanges | 複数ユーザーの編集競合を検出(SQL Server等) | 
✅ LockEdit(ロックモード)
| 定数 | 説明 | 
|---|
| dbOptimistic | 編集が確定するまでロックしない(高速) | 
| dbPessimistic | 編集時点でレコードをロック | 
✅ 使用後の後処理は必須
rs.Close
Set rs = Nothing
これを忘れるとリソースリークやデータベースロックの原因になります。
✅ 主な用途例
| 処理 | 使用例 | 
|---|
| 一覧表示 | フォームのループ出力などに使用 | 
| 条件検索 | SQLを指定して特定のデータ取得 | 
| データ更新 | rs.Edit→.Updateで直接書き換え | 
| 件数集計など | rs.RecordCountでレコード数確認 | 
✅ まとめ
| 操作 | 方法例 | 
|---|
| テーブル参照 | OpenRecordset("テーブル名", dbOpenSnapshot) | 
| 編集可能に開く | OpenRecordset("クエリ", dbOpenDynaset) | 
| SQL指定で開く | "SELECT * FROM ..."を指定 |