こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ADO VBA 実行時エラー3021

rs.Open "SELECT * FROM Tログイン WHERE サイト名='" & サイト名 & "'", cn, adOpenStatic, adLockOptimistic
rs("日時") = Now()
rs.Update

このコードを実行しようとしたときに、

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

と言うエラーが発生する場合があるのですが、
どういう意味のエラーなのかが良くわかりません。

ちなみに、
rs("日時") = Now()
をコメントアウトして、
rs.Updateのコードを実行しても、同じエラーが発生します。

投稿日時 - 2014-03-13 22:50:19

QNo.8512795

困ってます

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

レコードセットをOpenした時にレコードが一件もないとBOF,EOFは共にTrueになります。
無条件にUpDateするのではなく、レコードが取得出来た場合にだけ更新します。

もしRsのEOFがFalseなら
If Rs.EOF = False Then ' Not Rs.EOF と同義
  rs("日時") = Now()
  rs.Update
Else
  Msgbox "該当するレコードがありません。"
End If

上記はコードでは仮に10件のレコードが該当しても更新するのは先頭のレコード
一件だけです。もし、そのSelect文で複数レコードを更新するなら

rs.Open "SELECT * FROM Tログイン WHERE サイト名='" & サイト名 & "'", cn, adOpenStatic, adLockOptimistic

If Not Rs.EOF Then
  Do While Not Rs.EOF
    rs("日時") = Now()
    rs.Update
    Rs.MoveNext '次のレコードへ移動。カーソルがレコードの終端に来るとEOFはTrueになる
  Loop
Else
  Msgbox "該当するレコードがありません。"
End If

投稿日時 - 2014-03-14 00:11:48

お礼

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

投稿日時 - 2014-04-06 10:05:03

ANo.1

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(1)

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-