はじめに
Access VBAでデータベース操作を行う中で、以下のようなコードを書いていて…
recSet2.Edit recSet2.Fields("名前").Value = "田中" recSet2.Update
こんなエラーに遭遇したことはありませんか?
このエラーは、ADO(ActiveX Data Objects)を使っている場合にありがちです。実はこの Edit、ADOでは使えないメソッドなのです。
本記事ではこのエラーの原因から、DAOとADOの違い、正しい記述方法までをわかりやすく解説します。
ADOとDAOの違いをざっくり理解しよう
ライブラリ名 | 概要 | 代表的なクラス |
---|---|---|
DAO(Data Access Objects) | Accessの内部構造と親和性が高い | DAO.Recordset |
ADO(ActiveX Data Objects) | 他のDB(SQL Server等)と連携向き | ADODB.Recordset |
DAOでは .Edit メソッドが存在しますが、ADOでは存在しません。
この違いを知らないと、コンパイルエラーの原因になります。
原因:ADO.Recordsetに「Editメソッド」は存在しない
ADOでは、レコードの編集開始を明示的に宣言する必要がない設計です。
- DAO:変更前に .Edit が必要
- ADO:.Edit は存在せず、直接値を代入すればよい
この違いが「メソッドが見つからない」エラーの正体です。
DAOとADOの記述比較:編集処理の違い
🔸 DAOでの編集(正しい例)
recSet.Edit recSet!名前 = "田中" recSet.Update
この場合、.Edit を呼ぶことで「この行を編集開始するよ」という合図になります。
🔸 ADOでの編集(正しい例)
recSet.Fields("名前").Value = "田中" recSet.Update
ADOでは .Edit は不要です。フィールドに値をセットした後、.Update を呼べば反映されます。
よくあるNGコードと修正例
❌ 間違った書き方(DAO流をADOで書いてしまっている)
recSet2.Edit recSet2.Fields("名前").Value = "田中" recSet2.Update
このコードは ADO.Recordset ではエラーになります。Edit メソッドが存在しないため、コンパイルできません。
✅ 正しいADO流の書き方
recSet2.Fields("名前").Value = "田中" recSet2.Update
これだけでOKです。.Edit は使わず、代入して .Update を呼べばレコードが更新されます。
ADOでの編集の流れを詳しく解説
- 編集対象のレコードを特定する(例:Findやフィルタで)
- フィールドに新しい値をセット
- .Update を呼んで変更を確定
例:
recSet2.Find "ID = 5" recSet2.Fields("金額").Value = 10000 recSet2.Update
このように、レコードの選択と更新を明確に分けて書くのがADOの流儀です。
.Update を忘れるとどうなる?
.Fields(…).Value = … だけ書いて .Update を忘れると、レコードに変更が反映されません。
- 代入だけでは変更は一時的
- .Update を必ず最後に呼ぶ
これは DAO も ADO も共通なので、うっかりミスを避けるためにも注意が必要です。
まとめ:エラー原因と対策のポイント
項目 | 内容 |
---|---|
原因 | Edit メソッドは ADO には存在しない |
対策 | フィールドに直接値を代入し、.Update で確定 |
補足 | DAOとADOは似ているようで仕様が異なるので注意 |
よくある質問(FAQ)
Q. DAOとADOはどちらを使うべき?
Access単体アプリや小規模DB → DAO
SQL Serverなど外部DBとの連携や将来的な拡張 → ADO
あなたの開発環境・要件に応じて選択してください。
Q. 複数行まとめて更新したい場合は?
レコードをループして .Update を繰り返すことになります。たとえば:
Do Until recSet2.EOF If recSet2.Fields("ステータス").Value = "未処理" Then recSet2.Fields("ステータス").Value = "処理済" recSet2.Update End If recSet2.MoveNext Loop
おわりに:DAO→ADO移行でつまずかないために
DAOの記述スタイルに慣れていると、ADOの微妙な仕様違いに戸惑うことがよくあります。今回のような「Editが無い」問題をはじめ、移行時に気をつけるべきポイントは多数あります。
もし他にも「DAO→ADO変換で困っている」コードがあれば、お気軽にご相談ください。より柔軟で堅牢なデータ処理のために、ADOを正しく理解して使いこなしましょう!