こんにちは、on error resume next
についてお聞きしたいと思います。
次のようなレコードセットをナビゲートするループがあると仮定します。
Do while not rs.EOF
query = "UPDATE ...."
conn.execute(query)
rs.movenext
loop
UPDATE
が正常に機能していることを確認し、問題がないかどうかを確認したいので、次のようなデバッグ機能をコードに追加しました。
Do while not rs.EOF
query = "UPDATE ...."
on error resume next
conn.execute(query)
If Err.Number <> 0 Then
Response.write(Err.Number)
response.write("<br>")
response.write(Err.description)
response.write("<br>")
response.write(query)
response.write("<br><br>")
end if
on error goto 0
rs.movenext
loop
問題は次のとおりです。ループ中にエラーが発生した場合、次のサイクルでエラーが発生します(したがって、エラーブロックが再度トリガーされます)。またはon error goto 0
はErrオブジェクトをクリアしますか?言い換えれば、それはエラー処理として機能しますか?
VBScriptは、_goto 0
_のエラーをリセットします。
_on error resume next
i = 1 / 0
WScript.echo( err.number ) '' prints 11 (div by 0)
on error goto 0
WScript.echo( err.number ) '' prints 0 (no error)
_
明示的なerr.clear()
もあります。
使用する正しいコードは
Err.Clear
私はそれを次のコードでテストしました
<%on error resume next
response.write (p(10))
Response.write(Err.Number)
response.write("<br>")
response.write(Err.description)
response.write("<br>")
Err.Clear
Response.write(Err.Number)
response.write("<br>")
response.write(Err.description)
response.write("<br>")
%>
そして、正しい応答が下にあることがわかります。これは、エラーがクリアされていることを示しています。
* 13
型の不一致
0 *
エラー時に次を再開 ステートメントは、現在の行エラーのみを無視し、プログラム制御を次の行に送信します。
エラー時0に移動次のエラー再開時の動作を停止するだけです。それだけです。
<%
on error resume next
response.write(1/0)
if err.number <> 0 then
response.write("<b>" & "err= "&"</b>")
response.write(err.description)
response.write("<b>" & " err number= "&"</b>" )
response.write(err.number&"</br>")
end if
'after this statement ASP will no longer resume the error and program terminate at here if error occur after this line
on error goto 0
response.write(6/0)
%>