エラーのリトライ


香奈恵  2005-04-01 23:00:49  No: 89179

Private Sub b()
On Error Goto error_end
  Call a
  Exit Sub
error_end:
  Msgbox "エラーです"
End Sub

Private Sub a()
On Error Goto error_end
ReRun:
  (ここでDBからレコードセットをオープン)
  Exit Sub
error_end:
  Err.Clear
  Goto ReRun
End Sub
------------------------------------------
というサブルーチンを書きました。
レコードセット取得時にタイムアウトやデッドロックなどのエラーで、取得に失敗した場合に
リトライさせようと思っているのですが、1回目のエラーでは正常にReRunに戻り再度レコードセットを
オープンしようとするのですが、2回目のレコードセットの取得に失敗すると、Sub a() から処理が抜け、
「エラーです」のメッセージが表示されてしまいます。

なぜSub a() から処理が抜けてしまうのでしょうか?
どのように直せばリトライを継続できるのでしょうか?


さるべーじ  2005-04-01 23:35:41  No: 89180

GotoではなくResumeでしょうか。


medaka  2005-04-01 23:36:32  No: 89181

>なぜSub a() から処理が抜けてしまうのでしょうか?
ステップ実行して確かめた方がいいんじゃない?


香奈恵  2005-04-01 23:45:15  No: 89182

ステップ実行を行なうと
(ここでDBからレコードセットをオープン)
の次のステップは
Sub b()の中の Msgbox "エラーです" となります。
Sub a()の中の Exit Sub は実行されていないことは確認しています。


魔界の仮面弁士  2005-04-02 00:22:56  No: 89183

エラートラップ中に発生したエラーはトラップされません。

さるべーじさんが書かれたように、GoTo ReRun を
Resume 0 もしくは Resume ReRun に変更してみてください。

なお、VB6でのエラートラップの方法については、ヘルプの

[Visual Basic ドキュメント]
└[Visual Basic の使用方法]
  └[プログラミング ガイド]
    └[Visual Basic を使ってできること]
      └[コードのデバッグおよびエラー処理]

に詳しく書かれていますので、目を通しておかれると良いでしょう。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加