我在程序首端添加了On Error Resume Next ,以更好地处理执行时引起的错误,但在数据库访问中引出了麻烦,因为我在一个查询操作中出错了,从运行过程来看就是被掩盖的错误导致的。请问如何解决这个难题?
确实,因为使用了On Error Resume Next,即使前一步的操作(象你的查询操作)出了错,以后操作仍会被继续执行,最终导致完全错误的结果。我们的解决办法就是先检查一下错误再继续执行,具体代码见下:
If Err.Number = 0 And objConnection.Errors.Count = 0 Then
' 如果没有错误,则继续执行数据库查询
Set rstResults = dbData.Execute(txtSql)
End If
顺便说一句,On Error Resume Next 要添加到你声明语言后的第一行,而不是其它位置。
On Error Resume Next
On Error GoTo 0
说明
如果在您的代码中未使用 On Error Resume Next 语句, 所发生的运行时错误将显示错误信息,同时,代码的执行也随之终止。但是运行代码的主机决定了具体操作。主机有时可有选择地处理各类错误。在有些情况下,它可以在出错的地方激活脚本调试器。而在另一些情况下,由于主机无法通知用户,因此对所发生的错误没有明确说明。至于如何处理错误则完全取决于主机的功能。
On Error Resume Next 会使程序按照产生错误的语句之后的语句继续执行,或是按照最近一次所调用的过程(该过程含有 On Error Resume Next 语句)中的语句继续运行。这个语句可以不顾运行时错误,继续执行程序,之后您可以在过程内部建立错误处理例程。在调用另一个过程时,On Error Resume Next 语句变为非活动的。所以,如果希望在例程中进行内部错误处理,则应在每一个调用的例程中执行 On Error Resume Next 语句。
当调用另一过程时,禁止使用On Error Resume Next 语句,因此如果您想在例程中嵌入错误处理程序,则需要在每次调用例程时都应执行 On Error Resume Next 语句。当退出一个过程时,错误处理程序可恢复到它在进入所退出过程之前的状态。
如果您已启用 On Error Resume Next 错误处理程序,则可使用 On Error GoTo 0禁用错误处理程序。