秘密基地、どこに作った?

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

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

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

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

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

A 回答 (1件)

レコードセットを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
    • good
    • 1
この回答へのお礼

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

お礼日時:2014/04/06 10:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A