2013-01-24 36 views
21

Tôi có VBScript sau đây trong một trang ASP Classic:Lỗi kiểm tra NULL trong VBScript

function getMagicLink(fromWhere, provider) 
    dim url 
    url = "magic.asp?fromwhere=" & fromWhere 
    If Not provider is Nothing Then ' Error occurs here 
     url = url & "&provider=" & provider 
    End if 
    getMagicLink = "<a target='_blank' href='" & url & "'>" & number & "</a>" 
end function 

tôi tiếp tục nhận được một "đối tượng bắt buộc" lỗi messager trên dòng mà nói If Not provider Is Nothing Then.

Hoặc giá trị là NULL hoặc không phải là NULL, vậy tại sao tôi nhận được lỗi này?

Chỉnh sửa: Khi tôi gọi đối tượng, tôi chuyển vào NULL hoặc chuyển một chuỗi.

Trả lời

30

Từ mã của bạn, có vẻ như provider là một biến thể hoặc một số biến khác và không phải là đối tượng.

Is Nothing chỉ dành cho các đối tượng, nhưng sau đó bạn nói đó là giá trị phải là NULL hoặc NOT NULL, sẽ được xử lý bởi IsNull.

Hãy thử sử dụng:

If Not IsNull(provider) Then 
    url = url & "&provider=" & provider 
End if 

Cách khác, nếu điều đó không làm việc, hãy thử:

If provider <> "" Then 
    url = url & "&provider=" & provider 
End if 
+1

Tôi đã thử sử dụng 'If Not IsNull (provider) Then', nhưng sau đó trang đặt ra ngoại lệ trên dòng' url = url & "& provider =" & provider'. Lỗi nói: "Biến đối tượng không được đặt". –

+0

Đó là đầu trầy xước. Bạn đang đi trong 'vbNull' đến' nhà cung cấp', hay cái gì khác? – LittleBobbyTables

+0

Tôi đang đi qua trong 'Nothing' –

18

Tôi thấy rất nhiều sự nhầm lẫn trong các ý kiến. Null, IsNull()vbNull chủ yếu được sử dụng để xử lý cơ sở dữ liệu và thường không được sử dụng trong VBScript. Nếu nó không được nêu rõ trong tài liệu của đối tượng/dữ liệu gọi, không sử dụng nó.

Để kiểm tra xem biến chưa được khởi tạo, hãy sử dụng IsEmpty(). Để kiểm tra xem biến chưa được khởi tạo hay chứa "", hãy kiểm tra trên "" hoặc Empty. Để kiểm tra xem một biến có phải là một đối tượng hay không, hãy sử dụng IsObject và để xem đối tượng này có thử nghiệm tham chiếu không trên Is Nothing. Trong trường hợp của bạn, trước tiên bạn muốn thử nghiệm nếu biến là một đối tượng, và sau đó xem nếu biến đó là Nothing, bởi vì nếu nó không phải là một đối tượng, bạn sẽ gặp lỗi "Object Required" khi bạn kiểm tra Nothing.

đoạn để trộn và kết hợp trong mã của bạn:

If IsObject(provider) Then 
    If Not provider Is Nothing Then 
     ' Code to handle a NOT empty object/valid reference 
    Else 
     ' Code to handle an empty object/null reference 
    End If 
Else 
    If IsEmpty(provider) Then 
     ' Code to handle a not initialized variable or a variable explicitly set to empty 
    ElseIf provider = "" Then 
     ' Code to handle an empty variable (but initialized and set to "") 
    Else 
     ' Code to handle handle a filled variable 
    End If 
End If 
0

tôi sẽ chỉ thêm một khoảng trống ("") vào cuối của biến và thực hiện so sánh. Một cái gì đó như dưới đây sẽ làm việc ngay cả khi biến đó là null. Bạn cũng có thể cắt biến chỉ trong trường hợp không gian.

If provider & "" <> "" Then 
    url = url & "&provider=" & provider 
End if 
Các vấn đề liên quan