[點晴永久免費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 編輯過 |
關鍵字查詢
相關文章
正在查詢... |