Asp-Classic
測試對像是否為空會導致“需要對象”錯誤
我支持一些經典的 ASP 頁面,其中一個使用和重用對象conn並在 .asp 頁面完成處理時或在頁面重定向到另一個頁面之前處理它。
<% dim conn ... set conn = server.CreateObject("adodb.connection") ... sub cleanUp() conn.Close set conn = nothing end sub ... sub pageRedirect(url) call cleanUp() response.Redirect url : response.End end sub ... ' very end of file call cleanUp()%>我發現如果有重定向,我會立即收到伺服器錯誤
conn.Close,Microsoft VBScript runtime error ‘800a01a8’ Object required。我認為該行沒有理由多次執行,但為了安全起見,我重寫了該函式sub cleanUp() if(not (conn Is Nothing)) then conn.Close set conn = Nothing end if end sub但我仍然得到那個確切的錯誤,現在就線上
if(not (conn Is Nothing))!!我認為 的目的Is Nothing是在使用變數名 conn 之前進行測試,以防止出現“需要對象”錯誤,但測試拋出了同樣的錯誤。如果 conn 已經設置為 Nothing,我可以使用什麼其他測試來確保不引用它?
is nothing用於測試對象引用,如果變數不包含此類,則測試無效並引發錯誤,因此conn只能在經過set某事後進行測試。你可以;
if isobject(conn) then if not (conn Is Nothing) then set conn = nothing end if
- 使用顯式選項(每次腳本在沒有顯式選項的情況下執行時,一隻小狗就會死在那裡),您可能會像 Nilpo 提到的那樣早發現問題。
- 當您將要用作對象引用的變數變暗並在 Nothing 上對其進行測試時,請養成在初始化時將其設置為 Nothing (*): 的習慣
dim myObject : Set myObject = Nothing。(*) 不是在初始化時,因為在常式開始之前處理了昏暗,但是當您將所有昏暗放在常式的頂部時,它實際上是相同的。