ACCESS VBAで作成した処理を実行した際、「行が見つからなかったため更新できません」というエラーが出ることがあります。

エラーメッセージからは何が悪いのかわかりにくいエラーです。
今回は、行が見つからなかったため更新できません、の対処法をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。
この記事ではACCESSでのVBAの使い方をご紹介していきます。
「行が見つからなかったため更新できません」とは

「行が見つからなかったため更新できません」というエラーはACCESS VBAでADOを利用してテーブルの値を更新した際に発生します。
「列の値は最後に読み込まれた後で変更された可能性があります」と記載があるように、ADOでテーブルの値を読み込んで更新する処理を実行した際に、開発者が指定した更新処理よりも後で値が更新された可能性があるということです。
これでもまだわかりにくいですね。
具体的には以下の手順で発生します。
1.ADOで特定のテーブルにレコードを新規追加
2.同一プロシージャ内でレコードを追加した際に、値を明示的に指定しなかったフィールドに対して値を更新
「行が見つからなかったため更新できません」の回避方法
「行が見つからなかったため更新できません」を回避するには、ADOでの最初のレコード追加時に、あとで更新するフィールドの値を指定していしておく必要があります。
実際のプロシージャでエラーの発生例と回避方法を紹介します。
「行が見つからなかったため更新できません」の発生例
「行が見つからなかったため更新できません」のエラーが発生するプロシージャを紹介します。
Public Sub uriage_sample_add(suryo As Long)
'■■■売上サンプルテーブルにレコードを追加■■■
'変数にADOオブジェクトを代入
Set cnn = CurrentProject.Connection
Set rst1 = New ADODB.Recordset
rst1.CursorLocation = adUseClient
'レコードセットを取得
rst1.Open "売上サンプル", cnn, adOpenKeyset, adLockOptimistic
rst1.AddNew
rst1!売上日 = Date
rst1!顧客名 = "test"
rst1.Update
If suryo > 0 Then
rst1!数量 = suryo
rst1.Update
End If
'終了処理
rst1.Close: Set rst1 = Nothing
cnn.Close: Set cnn = Nothing
End Sub
上記の「uriage_sample_add」は以下に示す売上サンプルテーブルに新規レコードを追加するプロシージャです。

売上サンプルテーブルに新規レコードを追加する処理を
rst1.AddNew
rst1!売上日 = Date
rst1!顧客名 = "test"
rst1.Update
の部分で行っています。
レコードを追加する際に指定したフィールドは売上日と顧客名のみで、その他のフィールドは特に値を指定をしていないのでテーブルの規定値もしくは空白が入力されます。
さらにその後、変数で与えた数量の値に応じて数量フィールドの値を更新しています。
If suryo > 0 Then
rst1!数量 = suryo
rst1.Update
End If
この処理で「行が見つからなかったため更新できません」が発生します。
それの原因は、最初のレコード追加処理の際に、数量の値を指定していないことです。
同一プロシージャ内でレコードの追加と更新を行う場合は、最初のレコード追加時に、あとで更新するフィールドの値を指定していしておく必要があります。
今回の場合で言えば、レコード追加時の処理を以下のように変更すれば回避できます。
rst1.AddNew
rst1!売上日 = Date
rst1!顧客名 = "test"
rst1!数量 = 0
rst1.Update
いったん数量を0で指定してレコードを追加していることが分かると思います。
以上、行が見つからなかったため更新できません、の対処法をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に300以上のACCESSデータベースの開発・修正実績のあるはこにわガジェット(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

最後までお読みいただき、ありがとうございました。
