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

解決済みの質問

なぜrs.Move i ではダメなのでしょうか?

access2003です。

テーブル1には、
フィールド1





が入っています。

Sub test()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset

Dim i As Long

Set cn = CurrentProject.Connection
rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic

For i = 0 To rs.RecordCount
rs.Move i
Debug.Print rs.Fields(0).Value
Next

rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
End Sub

をすると、




とイミディエイトウインドウに表示されるのですが
Debug.Print rs.Fields(0).Value
の部分で

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

その時のiの値は、3です。

rs.MoveFirst
For i = 1 To rs.RecordCount
Debug.Print rs.Fields(0).Value
rs.MoveNext
Next

にすると、






が取得されます。

なぜrs.Move i ではダメなのでしょうか?
理由を教えてください。

投稿日時 - 2012-09-28 20:21:58

QNo.7721893

困ってます

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

ヘルプを読まれてみてはどうでしょうか。

Move に指定する値は、今いるところからいくつ移動するか・・・ではありませんか

「あ」に居た時に Move 1 なら、「い」に
「い」に居た時に Move 2 なら、「う」を飛ばして「え」に

確認された動作と一致しているように見えます。

投稿日時 - 2012-09-28 21:38:30

お礼

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

投稿日時 - 2012-10-23 20:03:37

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

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

回答(2)

ANo.2

Move はレコードのインデックスを指定する命令じゃない。
今いるところからいくつジャンプするかだ。

投稿日時 - 2012-09-29 22:41:33

お礼

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

投稿日時 - 2012-10-23 20:03:39

あなたにオススメの質問