• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:実行時エラー3021「BOFとEOFのいずれかTR)

実行時エラー3021「BOFとEOFのいずれかTRUEになっているか、または現在のレコードが削除されています。

このQ&Aのポイント
  • 実行時エラー3021「BOFとEOFのいずれかTRUEになっているか、または現在のレコードが削除されています。要求された操作には、現在のレコードが必要です。
  • ADOでデータの更新を行っている際に、rs.RecordCountの半分+1の時に発生するエラーです。
  • コードの内容は大分類が不明ではなく中分類が不明なら、中分類のレコードに大分類の値+不明にするという処理です。

質問者が選んだベストアンサー

  • ベストアンサー
  • okgoo3
  • ベストアンサー率74% (20/27)
回答No.3

フィルターで処理をしているのでレコードを更新するたびにレコード群の顔ぶれが動的に変化してしまっている。 全権取得してからフィルターを掛けるのではなく、RS.Open の段階で WHERE を使ったレコードセット取得を行えばよい。 またはわざわざ1件ずつループ処理せずとも、条件に合うレコードを一気に更新するよう UPDATE を発行してしまう。

VJZDIRCT
質問者

お礼

ありがとうございました。

その他の回答 (2)

回答No.2

Update かけたことにより、該当レコードがレコードセットから排除されているようです。 (更新によりFilter条件から外れる) レコードセットに含まれるレコード数が減ったときに、 カレントレコードが変更したレコードではなく、先頭から何番目で管理されているように見える。 レコード削除の場合と同じように、レコードセットの後ろから処理してみてはどうか?

VJZDIRCT
質問者

お礼

ありがとうございました。

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは For i = rs.RecordCount To 1 Step -1 にすれば出来そうな気もしますが、 Sub test()   Dim DB As DAO.Database   Dim sSql As String      Set DB = CurrentDb      sSql = "UPDATE T分類 SET T分類.中分類 = [T分類]![大分類] & ""(不明)"" "   sSql = sSql & "WHERE [T分類].大分類<>""不明"" AND [T分類].中分類=""不明"";"   DB.Execute (sSql)      End Sub のように、Executeを使ってみてはどうですか?

VJZDIRCT
質問者

お礼

ありがとうございました。

関連するQ&A