プロが教える店舗&オフィスのセキュリティ対策術

VB5
WIN2000  です。
おはようございます。初心者の質問で申し訳ありませんが、宜しくご指導頂きたいと思います。

MsgBoxの質問です。顧客管理表を作っていますが、存在しない顧客番号等を検索をした時に
《実行時エラー'3021':
カレントレコードがありません》

というエラーが出ます。これを、 MsgBoxで、「データーは存在しません。」という感じで表示できるようにするには、どのようなコードを書けばいいでしょうか?

ちなみに今は、データを抽出できた時に
rs.MoveNext
If rs.EOF Then
MsgBox "(^ω^)Already at end of recordset!"
rs.MoveLast
Exit Do
End If
Loop
というメッセージを出すようにしてます。
これの後に続くコードとしては、どのような感じにすれば・・?
BOFとかも考えたのですが、さっぱりうまく動きません・・。

どうかご指導宜しくお願いします。

A 回答 (6件)

追記です。



質問文のコードは使いませんので、
削除してください。


>これの後に続くコードとしては、どのような感じにすれば・・?

については、
先ほども言ったとおり、業務ロジックですので
こちらで教えることは出来ません。

皆さんが教えてくれているのは以下の内容です。

If データが取得できない時
⇒エラーメッセージ
else データが取得できた時
先頭レコードに移動
ループ開始
--顧客管理表出力処理(1行出力)--
次のデータに移動
ループここまで
メッセージ「(^ω^)Already at end of recordset!」
If文終了

もちろん、このロジックの前にレコードセット取得、
ロジック後にはレコードセット解放、
と各処理が記述されていることが前提です。
    • good
    • 0
この回答へのお礼

すごい!すごい!すごいです!

ご指導通りにしてみると、出来ましたーーー!泣
とっても感激です!
理解力がなく恥ずかしいほど馬鹿な自分にめちゃくちゃ親切にご指導いただけたこと、本当に感謝します!
ありがとうございましたーーー!

If rs.EOF Then
MsgBox "データーは存在しません。"
Else
rs.MoveFirst
Do Until rs.EOF
List1.AddItem rs.Fields("顧客TBL.顧客ID") & String((18 - Len(rs.Fields("顧客TBL.顧客ID"))), " ") _
& rs.Fields("顧客かな") ・・・・・

rs.MoveNext
Loop
MsgBox "(^ω^)Already at end of recordset!"
End If  

これでバッチリです☆あとはこのコードを参考書見ながら復習して理解を深めます。ありがとうございました。

お礼日時:2006/06/09 13:30

見当違いならすいません。


検索後すぐに rs.MoveNext を実行しているのではないでしょうか?
それならば rs.MoveNext 実行時にエラーが発生してしまいます。

~検索処理~
If (rs.EOF) then
MsgBox ("対象データなし")
exit sub '<-以下の処理は行わない
End If

といった対象データが存在するか確認する処理が必要になります。

また、

>>rs.MoveNext
>>If rs.EOF Then
>>MsgBox "(^ω^)Already at end of recordset!"
>>rs.MoveLast
>>Exit Do
>>End If
>>Loop

プログラムを見る限りではEOFを判断するIF~End IF内で rs.MoveLast を行っていますが、データが存在しな状態で最終レコードに移動しようとすると、エラーが発生する気がしますが・・・
    • good
    • 0
この回答へのお礼

ご指導、まことにありがとうございます!
無事にできまして、上↑の通りです。_tomo_さんのご指摘の通りでした!(・・よね?)
詳しく書いていただきまして、本当にありがとうございました!

お礼日時:2006/06/09 13:34

補足見ました。


ダメですよ。必要な部分は教えてくれないと。
他の方の補足も見ましたが、
教えた部分以外にDoが残ってるんですよ。
質問文にもそのDoは記述されていませんし。


レコードセットを取得しているところのすぐ次の行に
さっきのコードを書いてください。

必要な処理ってのは、
顧客管理表を出力する処理です。
こればっかりは教えられません。。。

この回答への補足

ありがとうございます!
色々すみません・・。申し訳ないかぎりです、。
DOありました!顧客管理表を出力する処理の前に!!
で、今ご指導とおりにやってみてますが、
VB画面が今固まってしまいまして、ちょっと時間かかると思いますのでまたお昼後にご報告します!

補足日時:2006/06/09 11:49
    • good
    • 0

ループに入る前に


If rs.BOF Then
 MsgBox "該当データなし", vbExclamation + vbOkOnly, "顧客番号エラー"
Else
 rs.MoveFirst
 While Not rs.EOF
  主処理
 Loop
End If
※この後は、該当データ無の場合とデータありの場合に異なる処理をしたいのなら前述のIf文で該当データ有無フラグを作成し処理を分岐する。

BOFを巧く拾えない場合は、On Errpr Resume Nextを使用して、エラーが発生する次の行でエラーコードを調べて、ループさせるか処理を中断させるかを判断させます。
エラーコードですが、使用するDBにより調べる方法が異なりますので、ヘルプで調べてください。

AccessのMDBをDAOで使用した場合、私は前述したBOFで巧くいっています。

この回答への補足

迅速な対応ありがとうございます!
やってみたのですが、LOOPに対するDOがありません・・というエラーがでます・・。あ、ちなみにこちらも、アクセスMDBとDAOでやっています。

rs.MoveNext
If rs.EOF Then
MsgBox "(^ω^)Already at end of recordset!"
rs.MoveLast
Exit Do
End If

If rs.BOF Then
MsgBox "該当データなし", vbExclamation + vbOKOnly, "顧客番号エラー"
Else
rs.MoveFirst
While Not rs.EOF
Exit Do
Loop

End If

補足日時:2006/06/09 11:25
    • good
    • 0

カレントレコードのエラーは1行目の


rs.MoveNext
ででています。
レコードが取得できないのだから当たり前です。
以下のようにしてください。

If rs.EOF Then
MsgBox "データーは存在しません。"
Else
rs.MoveFirst
Do Until rs.EOF
--何らかの処理--
rs.MoveNext
Loop
MsgBox "(^ω^)Already at end of recordset!"
End If

この回答への補足

迅速なご対応ありがとうございます!
やってみましたが、DOに対するLOOPがありません、のエラーがでます、。
しかも怒られると思いますが、「何らかの処理」のところに何を書けばいいかわからずです・・。すみません・・。

補足日時:2006/06/09 11:28
    • good
    • 0

On Error GoTo ErrorHandler


rs.MoveNext
If rs.EOF Then
MsgBox "(^ω^)Already at end of recordset!"
rs.MoveLast
Exit Do
End If
Loop
Exit Sub

ErrorHandler:
    MsgBox "データは存在しません。"

では、どうでしょうか?
確認も何もしてませんが。。

この回答への補足

ご指導ありがとうございます!
やってみましたが、データーを出すのにはきちんと"(^ω^)Already at end of recordset!"が出てエラーなくいきますが、
存在しなデーターを検索すると、カレントコードがありません、のエラーになり、このMsgBoxコードの前にある、rs.MoveLast が黄色で反転されできませんでした・・。

補足日時:2006/06/09 11:36
    • good
    • 0

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