Asp-Classic

測試對像是否為空會導致“需要對象”錯誤

  • March 13, 2012

我支持一些經典的 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.CloseMicrosoft 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
  1. 使用顯式選項(每次腳本在沒有顯式選項的情況下執行時,一隻小狗就會死在那裡),您可能會像 Nilpo 提到的那樣早發現問題。
  2. 當您將要用作對象引用的變數變暗並在 Nothing 上對其進行測試時,請養成在初始化時將其設置為 Nothing (*): 的習慣dim myObject : Set myObject = Nothing

(*) 不是在初始化時,因為在常式開始之前處理了昏暗,但是當您將所有昏暗放在常式的頂部時,它實際上是相同的。

引用自:https://stackoverflow.com/questions/9670120