欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

[點晴永久免費OA][轉帖]on error resume next用法

freeflydom
2023年4月7日 8:23 本文熱度 1227

VBscript語言提供了兩個語句和一個對象來處理"運行時錯誤",如下所示:

  • On Error Resume Next語句

  • On Error Goto 0語句

  • Err對象

 

簡單介紹一下On Error Resume Next,On Error Goto 0,Err這三者

On Error Resume Next語句和On Error Goto 0語句指明了當出現"運行時錯誤"時的處理方式。

當加上On Error Resume Next語句后,如果后面的程序出現"運行時錯誤"時,會繼續運行,不中斷。

當加上On Error Goto 0語句后,如果后面的程序出現"運行時錯誤"時,會顯示"出錯信息"并停止程序的執行。

Err對象保存了“錯誤信息”

下面結合例子講解On Error Resume Next,On Error Goto 0,Err這三者

沒有加上On Error Resume Next語句

如果沒有加上On Error Resume Next語句,當出現"運行時錯誤"時,會顯示"出錯信息"并停止程序的執行.

舉例(/test.asp文件):

i = 1/0   '0作除數,產生"運行時錯誤",顯示"出錯信息"并停止程序的執行
Response.Write "除法執行后"   '這句話將不會執行
%>

 

結果:

Microsoft VBscript 運行時錯誤 錯誤 '800a000b'

被零除

/test.asp,行 2

 

加上On Error Resume Next語句

        當我們在某處加上On Error Resume Next這條語句后,隨后的程序即便出現"運行時錯誤"時,也不會顯示"出錯信息",并且會繼續運行下去.

舉例:

On Error Resume Next   '后面的程序即便出現"運行時錯誤"時,也會繼續運行
i = 1/0   '0作除數,這是一種"運行時錯誤",但因為有了上面On Error Resume Next這句話,所以不會中斷執行,而是會繼續運行下去
Response.Write "除法執行后"   '這句話將會執行

 

結果:

    Microsoft VBscript 運行時錯誤 錯誤 '800a000b'

    被零除

    /test.asp,行 2

 

加上On Error Resume Next語句后,使用Err對象來得到錯誤信息

使用了On Error Resume Next之后,如果出錯,那么Err對象中將放置最近一次出錯的信息。

Err對象重要的屬性有三個:Number, Source, Description。分別是錯誤號,錯誤來源,錯誤描述。

你能捕獲的都是運行時錯誤,而且If Err then這樣的寫法等價于If Err.Number then

Dim i
i = 1/0   '第一個錯誤 
undefined_function "test"   '第二個錯誤,函數undefined_function未定義 
Response.Write Err.Description

運行結果:

類型不匹配

 

可以看到,提示的并不是被零除

使用On Error Goto 0 語句,讓系統重新接管錯誤的處理

加上On Error Resume Next語句后,后面的程序即便出現"運行時錯誤"時,也會繼續運行.可是如果希望后面的程序出現"運行時錯誤"時停止執行并顯示錯誤,該怎么做呢?

答案是:使用On Error Goto 0 語句

使用 On Error Goto 0 這條語句后,后面的程序一旦有錯誤發生就會提示錯誤,并結束腳本執行。

Dim i
i = 1/0
Response.Write "第一個除法執行后"
On Error Goto 0   '后面的語句一旦有錯誤發生就會提示錯誤,并結束腳本執行
i = 1/0
Response.Write "第二個除法執行后"

運行結果:

第一個除法執行后

Microsoft VBscript 運行時錯誤 錯誤 '800a000b'

被零除

/test.asp,行 2

 

可以看到,第一個Response.Write執行并輸出了內容,第二個Response.Write沒有執行。

詳細講一下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 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

 

結果:

除法執行后

 

兩個ok都沒有被打印。因為On Error Resume Next是在最外層下達的,所以當調用的子程序中出了問題之后,會直接從子程序中跳出,跳到外層的代碼中。

如果在子程序的開頭放置一個On Error Resume Next語句,出現的運行期錯誤不會中止這個子程序的運行,。

例如,如果需要向一個文件中寫入字符串,可以通過一個獨立的函數對文件進行訪問,防止錯誤中斷整個程序的運行:

'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

 

上面的程序在處理每個程序語句之前,先檢查Err對象的Number屬性。如果值為0(還沒有出現錯誤),那么就能夠繼續對文件的創建和寫入過程。如果錯誤發生了,腳本引擎將設置Err對象的屬性的值,并且繼續處理下一行。

只要不引起錯誤而能正常運行,函數的返回值將設置為“True”。否則函數將返回“False”。

On Error Goto 0語句

在ASP 2.0(盡管沒有文檔記錄)和ASP 3.0中,On Error Goto 0語句可以恢復缺省的錯誤處理行為。

在運行這個語句后,發生的運行期錯誤將導致缺省錯誤處理,在環境鏈中檢查每個嵌套的程序,直到主頁面代碼。如果沒有其他的環境關閉缺省錯誤處理,網頁的執行將停止并顯示IIS缺省錯誤網頁。

Err對象

在前面的例子中,關閉缺省錯誤處理后,通過檢查Err對象的Number屬性,查看錯誤是否已經出現。

Err對象存儲了關于運行期錯誤的信息

下表給出了Err對象提供的屬性。


  
Description設置或返回一個描述錯誤的字符串
Number(缺省屬性)設置或返回指定一個錯誤的值
Source設置或返回產生錯誤的對象的名稱
使用這些屬性可以檢查發生了哪種錯誤。例如,可以根據錯誤號采取不同的措施,也可以用Source和Description的屬性值為用戶提供錯誤信息。


 

下表給出了Err對象提供的方法。


  
Clear清除當前所有的Err對象設置
Raise產生一個運行期錯誤


 

使用Err對象生成一個“自定義錯誤”。

可以使用Err對象生成一個“自定義錯誤”。為什么要做這些呢?因為有時想把一個定制的錯誤消息傳送給用戶。可以把Err對象的屬性設置成所希望的任何值,然后調用Raise方法來產生這種錯誤,這樣做會停止程序的運行,并且把錯誤沿調用鏈向回傳遞。

下面的例子顯示了在服務器磁盤上讀取一個文本文件時,如何處理錯誤。注意如何使用常數vbObjectError,以確定所選擇的錯誤號不會和一個已存在的錯誤號混淆。通過把任意選擇的錯誤號加到此常數中,就能夠保證和預定義的錯誤不混淆。

  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

 

調用這個函數的代碼可以使用On Error Resume Next語句,并且能捕獲這個函數產生的錯誤。

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 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved