- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:実行時エラー3021「BOFとEOFのいずれかTR)
実行時エラー3021「BOFとEOFのいずれかTRUEになっているか、または現在のレコードが削除されています。
このQ&Aのポイント
- 実行時エラー3021「BOFとEOFのいずれかTRUEになっているか、または現在のレコードが削除されています。要求された操作には、現在のレコードが必要です。
- ADOでデータの更新を行っている際に、rs.RecordCountの半分+1の時に発生するエラーです。
- コードの内容は大分類が不明ではなく中分類が不明なら、中分類のレコードに大分類の値+不明にするという処理です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
フィルターで処理をしているのでレコードを更新するたびにレコード群の顔ぶれが動的に変化してしまっている。 全権取得してからフィルターを掛けるのではなく、RS.Open の段階で WHERE を使ったレコードセット取得を行えばよい。 またはわざわざ1件ずつループ処理せずとも、条件に合うレコードを一気に更新するよう UPDATE を発行してしまう。
その他の回答 (2)
- Hayashi_Trek
- ベストアンサー率44% (366/818)
回答No.2
Update かけたことにより、該当レコードがレコードセットから排除されているようです。 (更新によりFilter条件から外れる) レコードセットに含まれるレコード数が減ったときに、 カレントレコードが変更したレコードではなく、先頭から何番目で管理されているように見える。 レコード削除の場合と同じように、レコードセットの後ろから処理してみてはどうか?
質問者
お礼
ありがとうございました。
- 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を使ってみてはどうですか?
質問者
お礼
ありがとうございました。
お礼
ありがとうございました。