Access VBAを学習し始めると、
- DAOって何?
- Recordsetとは?
- どのコードを覚えればいい?
- DLookupとの違いは?
と悩む方が多いです。
結論から言うと、DAOでまず覚えるべきなのは以下の10パターンです。
① Database取得
② Recordset取得
③ 1件取得
④ 全件ループ
⑤ 件数取得
⑥ データ追加
⑦ データ更新
⑧ データ削除
⑨ SQL実行
⑩ トランザクション
この10個が理解できれば、実務システム開発の大部分に対応できます。
DAOとは
DAOは
Data Access Objects
の略です。
Accessのデータを操作するための仕組みです。
イメージとしては、
Access
↓
DAO
↓
テーブル操作
になります。
① Databaseを取得する
DAOの最初の一歩です。
Dim db As DAO.Database
Set db = CurrentDb
意味
現在のAccessデータベースを取得
しています。
② Recordsetを取得する
検索結果を保持します。
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("T_CUSTOMER")
イメージ
T_CUSTOMER
↓
Recordsetへ格納
↓
データ参照
③ 先頭レコードを取得する
1件だけ取得する場合です。
Set rs = CurrentDb.OpenRecordset( "T_CUSTOMER")
If Not rs.EOF Then
Debug.Print rs!顧客名
End If
結果
先頭顧客名取得
④ 全件ループする
実務で最も利用します。
Do Until rs.EOF
Debug.Print rs!顧客名
rs.MoveNext
Loop
重要
rs.MoveNext
を忘れると無限ループになります。
⑤ 件数を取得する
検索件数確認です。
rs.MoveLast
Debug.Print rs.RecordCount
結果
登録件数取得
ができます。
⑥ データを追加する
新規登録です。
Set rs = CurrentDb.OpenRecordset("T_CUSTOMER")
rs.AddNew
rs!顧客コード = "C001"
rs!顧客名 = "東京商事"
rs.Update
流れ
AddNew
↓
値設定
↓
Update
です。
⑦ データを更新する
既存データ変更です。
rs.Edit
rs!顧客名 = "大阪商事"
rs.Update
流れ
Edit
↓
値変更
↓
Update
です。
⑧ データを削除する
レコード削除です。
rs.Delete
注意
実行すると元に戻せません。
⑨ SQLを実行する
実務で最も多いです。
UPDATE
CurrentDb.Execute "UPDATE T_CUSTOMER " & "SET 顧客名='東京商事'"
DELETE
CurrentDb.Execute "DELETE FROM T_CUSTOMER"
INSERT
CurrentDb.Execute "INSERT INTO T_CUSTOMER " & "(顧客コード,顧客名) " & _
"VALUES('C001','東京商事')"
メリット
Recordsetより高速です。
⑩ トランザクション処理
重要データ向けです。
On Error GoTo ErrHandler
DBEngine.BeginTrans
CurrentDb.Execute strSQL1
CurrentDb.Execute strSQL2
DBEngine.CommitTrans
Exit Sub
ErrHandler:
DBEngine.Rollback
効果
途中エラー
↓
全取消
できます。
初心者がまず覚えるべきDAOテンプレート
実務で最も使うコードです。
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT * " & "FROM T_CUSTOMER")
Do Until rs.EOF
Debug.Print rs!顧客名
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
初心者がよくするミス
① MoveNext忘れ
Do Until rs.EOF
Loop
↓
無限ループ
② Close忘れ
悪い例
Set rs = ...
だけ
良い例
rs.Close
Set rs = Nothing
③ Nullエラー
悪い例
strName = rs!顧客名
良い例
strName = Nz(rs!顧客名, "")
DAOとDLookupの使い分け
DLookup
DLookup(…)
向いている処理
1件取得
DAO
OpenRecordset
向いている処理
複数件取得
ループ処理
CSV取込
実務で覚える順番
おすすめ学習順です。
Step1
OpenRecordset
Step2
Do Until rs.EOF
Step3
AddNew
Edit
Delete
Step4
Execute
Step5
BeginTrans
CommitTrans
Rollback
Copilot活用例
DAO学習にCopilotは非常に便利です。
検索処理作成
Access VBAです。
DAOでT_CUSTOMERを
検索するコードを
作成してください。
更新処理作成
DAOのExecuteを利用して
顧客情報を更新する
コードを作成してください。
コードレビュー
以下のDAOコードの
改善点を教えてください。
まとめ
DAO初心者がまず覚えるべきなのは次の10個です。
Database
Recordset
OpenRecordset
EOF
MoveNext
AddNew
Edit
Delete
Execute
BeginTrans
特に実務で最も利用するのは
CurrentDb.OpenRecordset
CurrentDb.Execute
の2つです。
まずは、
OpenRecordset
↓
ループ
↓
データ取得
から習得しましょう。
これだけで顧客管理システム、売上管理システム、CSV取込システムの基礎部分を開発できるようになります。


コメント