[点晴永久免费OA][转帖]on error resume next用法
当前位置:点晴教程→点晴OA办公管理信息系统
→『 经验分享&问题答疑 』
简单介绍一下On Error Resume Next,On Error Goto 0,Err这三者下面结合例子讲解On Error Resume Next,On Error Goto 0,Err这三者没有加上On Error Resume Next语句i = 1/0 '0作除数,产生"运行时错误",显示"出错信息"并停止程序的执行 Response.Write "除法执行后" '这句话将不会执行 %> 加上On Error Resume Next语句当我们在某处加上On Error Resume Next这条语句后,随后的程序即便出现"运行时错误"时,也不会显示"出错信息",并且会继续运行下去. On Error Resume Next '后面的程序即便出现"运行时错误"时,也会继续运行 i = 1/0 '0作除数,这是一种"运行时错误",但因为有了上面On Error Resume Next这句话,所以不会中断执行,而是会继续运行下去 Response.Write "除法执行后" '这句话将会执行
加上On Error Resume Next语句后,使用Err对象来得到错误信息Dim i i = 1/0 '第一个错误 undefined_function "test" '第二个错误,函数undefined_function未定义 Response.Write Err.Description 类型不匹配 使用On Error Goto 0 语句,让系统重新接管错误的处理Dim i i = 1/0 Response.Write "第一个除法执行后" On Error Goto 0 '后面的语句一旦有错误发生就会提示错误,并结束脚本执行 i = 1/0 Response.Write "第二个除法执行后" 第一个除法执行后 详细讲一下On Error Resume NextOn Error Resume Next语句的作用范围Sub test() Dim i i = 1/0 Response.Write "OK" End Sub Sub test1() test Response.Write "OK" End Sub On Error Resume Next test1 除法执行后 'returns True if it succeeds, or False on any error Function WriteNewFile(strFileName, strContent) On Error Resume Next 'turn off the default error handler WiteNewFile = Flase 'default return value of function Set objFSO = createObject("scripting.FileSystemObject") If Err.Number = 0 Then Set objFile = objFSO.createTextFile(strFileName,True) If Err.Number = 0 Then objFile.WriteLine strContent If Err.Number = 0 Then objFile.Close If Err.Number = 0 Then WriteNewFile = True End Function On Error Goto 0语句Err对象
使用Err对象生成一个“自定义错误”。Set objFSO = createObject("scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("strFileName", ForReading) select Case Err.Number Case 0 'OK, take no action Case 50,53 'standard file or path not found errors 'create custom error values and raise error back up the call chain intErrNumber = vbObjectError + 1073 'custom error number strErrDescription = "The file has been deleted or moved. " strErrSource = " ReadThisFile function" Err.Raise intErrNumber, strErrSource, strErrDescription Exit Function Case Else 'som other error 'raise the standard error back up the call chain Err.Raise Err.Number, Err.Source, Err.Description Exit Function End select ReadThisFile = objFile.ReadAll ' we opened it OK, so return the content objFile.Close End Function strContent = ReadThisFile("myfile.txt") If Err.Number = 0 Then Response.Write "File content is:<br/>" & strContentElse Response.Write Err.Source & "<br/>" & Err.Description End If
下面是另一篇: on error resume next 用了on error resume next 则在这句往后的代码就算出错也会继续执行 具体有没有错可以用err.number来判断 err.number=0表示没有出错 err.number<>0表示有错 具体什么错误可以用ASPError对象获得 首先建立 set objasperror=server.GetLastError 对象,接着由 ASPError 物件的属生取得相关信息: objasperror.ASPCode:传回iis产生的错误码 objasperror.Number:传回com标准错误码,如 0x800a03fc objasperror.Source:传回实际产生错误的原始码 objasperror.Category:指出错误的来源为 asp、script 或是 object objasperror.File:传回错误程序档案名称 objasperror.Line:传回错误程序的行数 objasperror.Column:传回错误程序的列数 objasperror.Description:传回错误原因简介 objasperror.ASPDescription:传回详细错误原因 简单介绍 ASP是非常简单的,以至于许多的开发者不会去思考错误处理。错误处理能够让你的应用程序更加合理。我看到过很多个用ASP编写的商业网站,大多数都忽略了错误处理。 错误的类型 有三种主要的错误类型: 1.编译错误: 这种错误出现一般都是代码的语法问题。因为编译错误而导致辞ASP停止运行。 2.运行错误: 这个错误是发生在你准备运行ASP时的。例如:如果你试图给一个变量赋值,但是却超出了该变量允许的范围。 3.逻辑错误: 逻辑错误是最难被发现的,这种错误经常是一种结构错误,电脑是发现不了的。这就需要我们彻头彻尾地检查我们的代码。 因为编译错误一般是和逻辑错误一起发生的,一般都能显示出来,所以我们担心的就只是运行错误。它都终止ASP的运行,而且给用户丢下一堆很不友好的文字。 那么我们要怎样处理运行错误呢? 我们先来看看,ASP唯一提供给我们的错误命令---On Error Resume Next(这里提醒一下初学者,在ASP中只有On Error Resume Next语句,没有On Error Resume Goto语句) 如果你不使用On Error Resume Next语句的话,一切运行错误都会发生,这个是致命的,那么就会有一段错误代码“展现”给用户,而且ASP程序也会停止。 下面就是一个错误代码: Microsoft OLE DB Provider for ODBC Drivers error 80004005 [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified /test.asp, line 60 当我们在程序最上面使用On Error Resume Next语句时,所有的错误都会被忽略,程序会自动执行下一条语句。这样程序就会完全执行,出错后用户也不会看到出错信息。但是这样也有 不好的地方,那就是如果程序没有按照你想像的执行的话,你就很难找到到底是哪里出了问题,所以你就得在必要的地方对错误进行处理。 处理错误 在ASP中,处理错误的最好的办法就是在程序最底端放上代码来处理错误。我也推荐在每个ASP程序都使用缓冲区。这样的话,如果错误发生,页面就会停止, 页面内容也会被清除,这样用户就不会看到错误信息,对你们的抱怨也就少了!下面是一个例子: <%@ LANGUAGE="VBscript" %> <%Response.Buffer = True "设置buffer为True On Error Resume Next "开始错误处理 %> <%"错误处理 If Err.Number <> 0 Then "清除页面 Response.Clear "显示错误信息给用户 %> <HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY BGCOLOR="#C0C0C0"> <FONT FACE="ARIAL">An error occurred in the execution of this ASP page<BR> Please report the following information to the support desk <P><B>Page Error Object</B><BR> 错误 Number: <%= Err.Number %><BR> 错误信息: <%= Err.Description %><BR> 出错文件: <%= Err.Source %><BR> 出错行: <%= Err.Line %><BR> </FONT> </BODY> </HTML> <%End If%> 你们上面看到了,我首先设置On Error Resume Next ,这样出现错误就不会影响程序的执行。 错误处理和数据库 在错误处理中加入数据库的执行是很复杂的。假若我们有一个程序,有很多的命令去向数据库中添加记录,如果insert/update在程序的最底部执行,如果我们前面又错误发生,那就完了!我们就会向数据库中添加了一个错误的信息。因为我们用了On Error Resume Next 一切的错误都被忽略了!即使前面出错,程序依旧会向数据库中添加数据的。 为避免这种情况,我们就先得做些手脚,正确处理的方法如下: If Err.Number = 0 And objConnection.Errors.Count = 0 Then "这里才能执行语句,因为没有错误 Set rstResults = dbData.execute(txtSql) End If 更多高级的处理办法 当一个错误发生时,你们也可以显示更多的错误信息。下面是同时处理数据库和页面错误的例子,有了它我们一下就能发现我们程序中的所有错误。 (由于有些地方我觉得英文更能说时问题,所以没有翻译)。 <% If Err.Number <> 0 Then Response.Clear select Case Err.Number Case 8 "指定错误的Number "在这里处理自定义错误 Case Else "一般错误 If IsObject(objConnection) Then If objConnection.Errors.Count > 0 Then %> <B>Database Connection Object</B> <% For intLoop = 0 To objConnection.Errors.Count - 1 %> Error No: <%= objConnection.Errors(intLoop).Number %><br> Description: <%= objConnection.Errors(intLoop).Description %><BR> Source: <%= objConnection.Errors(intLoop).Source %><BR> SQLState: <%= objConnection.Errors(intLoop).SQLState %><BR> NativeError: <%= objConnection.Errors(intLoop).NativeError %><P> <% Next End If End If If Err.Number <> 0 Then %> <B> Page Error Object</B><BR> Error Number <%= Err.Number %><BR> Error Description <%= Err.Description %><BR> Source <%= Err.Source %><BR> LineNumber <%= Err.Line %><P> <%End If End select End If %> 上面的例子让我们一下了处理了很多在数据库中出现的问题,这个在我们日常编程也是常用的!我们也应该看到那个select Case 语句,它能让我们来处理特定的错误。 Redirect 和错误处理 有一点我们就当注意一下,就是我们常用到的redirect对象,如果一个页面中出现了redirect对象,那么错误处理就失去了意义。所以在转向之前我们还得处理一下,如下: If Err.Number = 0 And objConnection.Errors.Count = 0 Then Response.Clear Response.Redirect ?lt;URL Here>? End If 把代码变得更整齐 为了让代码变得更整齐,首先把错误处理的文件放在一个包含文件中。这样你就可以在任何文件中使用它。这样修改也方便。在你程序的最上方加入(当然在语言声明之后)On Error Resume Next语句。在你执行SQL以前进行错误检查。使用redirect以前也要进行错误处理。 让你处理错误的包含文件在代码的最上面 https://blog.csdn.net/xuxujian/article/details/6552858 该文章在 2023/4/7 9:10:16 编辑过 |
关键字查询
相关文章
正在查询... |