- ベストアンサー
"カレントレコードがありません"とでてきます
Access97を使用しています。 データは テーブルAの項目B、項目Cが下記のようにあるとします。 フォーム上のText"B"に項目Bを入力します。 項目B 項目C 11 a 11 b 22 aa 22 bb 22 cc 33 aaa 33 ccc この時 Set DB = CurrentDb() strSQL = "SELECT * FROM A WHERE " strSQL = strSQL + "B='" & Me.B & "';" Set RS = DB.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly) RS.MoveFirst RS.MoveLast m = RS.RecordCount For i = 1 To m COIL_N = RS.Fields("C") Call RS.MoveNext Next i 上記のようなモジュールですが、例えば 項目Bの"11"を選んだ時、項目Cの二番目のデータbが 取得できません。 "カレントレコードがありません"とでてきます。何故でしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
RS.MoveLast した時点で、レコードセットの最終レコードがカレントになっていますよね その後 RS.MoveNext すれば、EOFになりますからカレントは無くなります。 恐らくレコードセットの1レコード目は、bで2レコード目がaなのでは? その辺は、キー設定がどのようになっているかに依存しますから。
その他の回答 (2)
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 No.1の人の言う通り、1行実行しながら変数などに格納される値をモニタしてみることです。 "カレントレコードがありません。" というエラーの場合は、レコードセットのEOFかBOFプロパティがTrueになっていることが原因ではないでしょうか。 それから、気になった点は何故 RS.MoveFirst RS.MoveLast としているのかという点です。 あと、レコードセットの読み込みはForループより、DoループでEOFプロパティに格納される値を条件にした方がいいと思います。 Do Until (RS.EOF) COIL_N = RS.Fields("C") RS.MoveNext Loop という感じです。 MoveFirstとMoveLastをなしにして、上記のコードにすればOKだと思います。
お礼
ありがとうございました。上手く行きました。
- redsky
- ベストアンサー率18% (66/360)
ブレイクポイントを設定して1行ずつ実行すれば、原因がわかりそうな 質問ですね。 とりあえず、mにしかるべき数字(この場合は2)がちゃんと入ってる か確認してみては? あと最後から2番目のCALL文て必要なんですか? なくてもいいような・・。
お礼
ありがとうございました。上手く行きました。