国产高清在线免费观看-国产高清在线免费无码-国产高清在线男人的天堂-国产高清在线视频-国产高清在线视频精品视频-国产高清在线视频伊甸园

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

[點晴永久免費OA][轉(zhuǎn)帖]on error resume next用法

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

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語句指明了當出現(xiàn)"運行時錯誤"時的處理方式。

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

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

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

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

沒有加上On Error Resume Next語句

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

舉例(/test.asp文件):

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

 

結(jié)果:

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

被零除

/test.asp,行 2

 

加上On Error Resume Next語句

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

舉例:

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

 

結(jié)果:

    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"   '第二個錯誤,函數(shù)undefined_function未定義 
Response.Write Err.Description

運行結(jié)果:

類型不匹配

 

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

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

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

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

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

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

運行結(jié)果:

第一個除法執(zhí)行后

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

被零除

/test.asp,行 2

 

可以看到,第一個Response.Write執(zhí)行并輸出了內(nèi)容,第二個Response.Write沒有執(zhí)行。

詳細講一下On Error Resume Next

On Error Resume Next語句的作用范圍

On Error Resume Next語句只作用于本級別的后續(xù)語句。不會作用于被調(diào)用的函數(shù)或子程序,同樣也不會作用于父級別的程序段

On Error Resume Next語句如果出現(xiàn)在某個函數(shù)中,則只對本函數(shù)產(chǎn)生影響。對“主調(diào)函數(shù)”和“被調(diào)函數(shù)”均沒有影響

一個子程序中如果沒有On Error Resume Next語句,那么當錯誤在子程序中出現(xiàn)時,將會中斷這個子程序的運行,跳轉(zhuǎn)到調(diào)用這個子程序的外層程序.如果這個外層程序在“出問題的函數(shù)調(diào)用”之前包含有On Error Resume Next語句,則會接著執(zhí)行“函數(shù)調(diào)用”之后的語句。如果這個外層程序在“出問題的函數(shù)調(diào)用”之前沒有On Error Resume Next語句,那么就跳向外層。這個過程一直重復(fù),直到找到包含有On Error Resume Next語句的環(huán)境繼續(xù)運行,如果最外層的程序也沒有包含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

 

結(jié)果:

除法執(zhí)行后

 

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

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

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

'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(還沒有出現(xiàn)錯誤),那么就能夠繼續(xù)對文件的創(chuàng)建和寫入過程。如果錯誤發(fā)生了,腳本引擎將設(shè)置Err對象的屬性的值,并且繼續(xù)處理下一行。

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

On Error Goto 0語句

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

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

Err對象

在前面的例子中,關(guān)閉缺省錯誤處理后,通過檢查Err對象的Number屬性,查看錯誤是否已經(jīng)出現(xiàn)。

Err對象存儲了關(guān)于運行期錯誤的信息

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


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


 

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


  
Clear清除當前所有的Err對象設(shè)置
Raise產(chǎn)生一個運行期錯誤


 

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

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

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

  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

 

調(diào)用這個函數(shù)的代碼可以使用On Error Resume Next語句,并且能捕獲這個函數(shù)產(chǎn)生的錯誤。

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
則在這句往后的代碼就算出錯也會繼續(xù)執(zhí)行
具體有沒有錯可以用err.number來判斷
err.number=0表示沒有出錯
err.number<>0表示有錯
具體什么錯誤可以用ASPError對象獲得
首先建立
set objasperror=server.GetLastError 對象,接著由 ASPError 物件的屬生取得相關(guān)信息:
objasperror.ASPCode:傳回iis產(chǎn)生的錯誤碼
objasperror.Number:傳回com標準錯誤碼,如 0x800a03fc
objasperror.Source:傳回實際產(chǎn)生錯誤的原始碼
objasperror.Category:指出錯誤的來源為 asp、script 或是 object
objasperror.File:傳回錯誤程序檔案名稱
objasperror.Line:傳回錯誤程序的行數(shù)
objasperror.Column:傳回錯誤程序的列數(shù)
objasperror.Description:傳回錯誤原因簡介
objasperror.ASPDescription:傳回詳細錯誤原因
簡單介紹 
  ASP是非常簡單的,以至于許多的開發(fā)者不會去思考錯誤處理。錯誤處理能夠讓你的應(yīng)用程序更加合理。我看到過很多個用ASP編寫的商業(yè)網(wǎng)站,大多數(shù)都忽略了錯誤處理。 錯誤的類型 
有三種主要的錯誤類型: 
1.編譯錯誤: 
  這種錯誤出現(xiàn)一般都是代碼的語法問題。因為編譯錯誤而導致辭ASP停止運行。 
2.運行錯誤: 
  這個錯誤是發(fā)生在你準備運行ASP時的。例如:如果你試圖給一個變量賦值,但是卻超出了該變量允許的范圍。 
3.邏輯錯誤: 
  邏輯錯誤是最難被發(fā)現(xiàn)的,這種錯誤經(jīng)常是一種結(jié)構(gòu)錯誤,電腦是發(fā)現(xiàn)不了的。這就需要我們徹頭徹尾地檢查我們的代碼。 
  因為編譯錯誤一般是和邏輯錯誤一起發(fā)生的,一般都能顯示出來,所以我們擔心的就只是運行錯誤。它都終止ASP的運行,而且給用戶丟下一堆很不友好的文字。 那么我們要怎樣處理運行錯誤呢? 
  我們先來看看,ASP唯一提供給我們的錯誤命令---On Error Resume Next(這里提醒一下初學者,在ASP中只有On Error Resume Next語句,沒有On Error Resume Goto語句) 如果你不使用On Error Resume Next語句的話,一切運行錯誤都會發(fā)生,這個是致命的,那么就會有一段錯誤代碼“展現(xiàn)”給用戶,而且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語句時,所有的錯誤都會被忽略,程序會自動執(zhí)行下一條語句。這樣程序就會完全執(zhí)行,出錯后用戶也不會看到出錯信息。但是這樣也有 不好的地方,那就是如果程序沒有按照你想像的執(zhí)行的話,你就很難找到到底是哪里出了問題,所以你就得在必要的地方對錯誤進行處理。 
處理錯誤 
  在ASP中,處理錯誤的最好的辦法就是在程序最底端放上代碼來處理錯誤。我也推薦在每個ASP程序都使用緩沖區(qū)。這樣的話,如果錯誤發(fā)生,頁面就會停止, 頁面內(nèi)容也會被清除,這樣用戶就不會看到錯誤信息,對你們的抱怨也就少了!下面是一個例子: 
<%@ LANGUAGE="VBscript" %> 
<%Response.Buffer = True 
"設(shè)置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%> 
  你們上面看到了,我首先設(shè)置On Error Resume Next ,這樣出現(xiàn)錯誤就不會影響程序的執(zhí)行。 
錯誤處理和數(shù)據(jù)庫 
  在錯誤處理中加入數(shù)據(jù)庫的執(zhí)行是很復(fù)雜的。假若我們有一個程序,有很多的命令去向數(shù)據(jù)庫中添加記錄,如果insert/update在程序的最底部執(zhí)行,如果我們前面又錯誤發(fā)生,那就完了!我們就會向數(shù)據(jù)庫中添加了一個錯誤的信息。因為我們用了On Error Resume Next 一切的錯誤都被忽略了!即使前面出錯,程序依舊會向數(shù)據(jù)庫中添加數(shù)據(jù)的。 
  為避免這種情況,我們就先得做些手腳,正確處理的方法如下: 
If Err.Number = 0 And objConnection.Errors.Count = 0 Then 
"這里才能執(zhí)行語句,因為沒有錯誤 
  Set rstResults = dbData.execute(txtSql) 
End If 
更多高級的處理辦法 
  當一個錯誤發(fā)生時,你們也可以顯示更多的錯誤信息。下面是同時處理數(shù)據(jù)庫和頁面錯誤的例子,有了它我們一下就能發(fā)現(xiàn)我們程序中的所有錯誤。 (由于有些地方我覺得英文更能說時問題,所以沒有翻譯)。 
<% 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 %> 
  上面的例子讓我們一下了處理了很多在數(shù)據(jù)庫中出現(xiàn)的問題,這個在我們?nèi)粘>幊桃彩浅S玫?!我們也?yīng)該看到那個select Case 語句,它能讓我們來處理特定的錯誤。 
Redirect 和錯誤處理 
  有一點我們就當注意一下,就是我們常用到的redirect對象,如果一個頁面中出現(xiàn)了redirect對象,那么錯誤處理就失去了意義。所以在轉(zhuǎn)向之前我們還得處理一下,如下: 
  If Err.Number = 0 And objConnection.Errors.Count = 0 Then 
   Response.Clear 
   Response.Redirect ?lt;URL Here>? 
  End If 
把代碼變得更整齊 
  為了讓代碼變得更整齊,首先把錯誤處理的文件放在一個包含文件中。這樣你就可以在任何文件中使用它。這樣修改也方便。在你程序的最上方加入(當然在語言聲明之后)On Error Resume Next語句。在你執(zhí)行SQL以前進行錯誤檢查。使用redirect以前也要進行錯誤處理。 
讓你處理錯誤的包含文件在代碼的最上面
https://blog.csdn.net/xuxujian/article/details/6552858

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

主站蜘蛛池模板: 97国产精品无码免费视频 | 国产高清视频免费人人爱 | 亚洲精品无码mv在线观看网站 | 免费a级毛片无码a∨免费软件 | 精品国产三级a∨在线 | 一级片免费在线观看 | 人妻偷拍无码中文字幕 | 伊人婷婷天天久久入口 | 妖精视频一区二区三区 | 久久久久国产精品人妻 | 麻豆国产原创视频在线播放 | 国产午夜一区二区三区影院 | 国产裸体AAAA片免费看 | 无码动漫成本人视频网站 | 久久精品国产色蜜蜜麻豆 | 不卡中文字幕最新视频国产综合无码一区二区三区 | 成人丰满亚洲国产精品无码区 | 四虎国产精品永久地址99 | 久久精品国产免费中文 | 免费看到湿的小黄文软件APP | 日韩欧美在线观看综合网另类 | 人妻AV中文字幕一区二区三区 | 午夜亚洲国产理论片二级港台二级 | 亚洲精品无码国产 | 久久夜色精品国产噜噜亚洲av | 麻豆视频免费 | 人妻少妇无码精品视频区 | 久久国语精品 | 精品国产免费人成网站 | 国产精品精品自在线拍 | 国产成人女人毛片视频在线 | 在线观看国产精品 | 国精产品一品二品国精在线观看 | 久久精品国产亚洲av大全 | 亚洲午夜福利在线观看 | 丰满少妇被粗大的猛烈进出视频 | 欧美一级影院 | 亚洲欧美电影在线一区二区 | 亚洲中文字幕av在线 | 国产精品天干天干综合网 | 无码人妻系列 |