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 ..." を指定 |