ADOで「Editが見つかりません」エラーの原因と正しい書き方を徹底解説

はじめに

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での編集の流れを詳しく解説

  1. 編集対象のレコードを特定する(例:Findやフィルタで)
  2. フィールドに新しい値をセット
  3. .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を正しく理解して使いこなしましょう!