简体   繁体   English

是什么导致Microsoft VBScript运行时错误'800a01a8'

[英]What's causing Microsoft VBScript runtime error '800a01a8'

I am getting this specific error, help would be appreciated 我收到此特定错误,将不胜感激

Microsoft VBScript runtime error '800a01a8' Microsoft VBScript运行时错误'800a01a8'

Object required: 'openRecordSet(...)' 所需对象:“ openRecordSet(...)”

/admin/users/affiliates/process.asp, line 47 /admin/users/affiliates/process.asp,第47行

Line 47 is Set objRecordset = openRecordset(strSQL, objConnection) 第47行是Set objRecordset = openRecordset(strSQL, objConnection)

<%  
SetUserLevel(" 2 ")

If (InStr(Request.ServerVariables("HTTP_REFERER"), "://jim/admin/users/affiliate") = 0) Then
    Response.Redirect( "/admin/users/affiliate/" )
End If

Dim objConnection, objRecordset, strSQL, Affiliate_ID

If (IsEmpty(Request.Form("Affiliate_ID")) Or RTrim(Request.Form("Affiliate_ID")) = "") Then
    Affiliate_ID = 0
Else
    Affiliate_ID = prepareSQL(Request.Form("Affiliate_ID"))
End If

strSQL = "EXEC sp_User_Add_Affiliate " & _
        Session("User_ID") & ", '" & _
        prepareSQL(Request.Form("First_Name")) & "', '" & _
        prepareSQL(Request.Form("Middle_Initial")) & "', '" & _
        prepareSQL(Request.Form("Last_Name")) & "', '" & _
        prepareSQL(Request.Form("Email_Address")) & "', '" & _
        Request.ServerVariables("REMOTE_ADDR") & "', " & _
        Session.SessionID & ", '" & _
        prepareSQL(Request.Form("Address_1")) & "', '" & _
        prepareSQL(Request.Form("Address_2")) & "', '" & _
        prepareSQL(Request.Form("City")) & "', '" & _
        prepareSQL(Request.Form("State")) & "', '" & _
        prepareSQL(Request.Form("Zip")) & "', '" & _
        prepareSQL(Request.Form("Country")) & "', '" & _
        prepareSQL(Request.Form("Phone")) & "', '" & _
        prepareSQL(Request.Form("Phone_Extension")) & "', '" & _
        prepareSQL(Request.Form("Fax")) & "', '" & _
        prepareSQL(Request.Form("Company")) & "', '" & _
        prepareSQL(Request.Form("Pay_To")) & "', '" & _
        prepareSQL(Request.Form("Tax_ID")) & "', '" & _
        prepareSQL(Request.Form("Tax_ID_Type")) & "', '" & _
        prepareSQL(Request.Form("Tax_Class")) & "', " & _
        Affiliate_ID & "," & _
        Request.Form("ID") & "," & _
        Request.Form("Approved")

Set objConnection   = openConnectionAdmin()
Set objRecordset    = openRecordset(strSQL, objConnection)

If objRecordset("Error") = "1" Then
    Response.Write objRecordset("Data")
    Response.End
End If

objRecordset.Close

Set objRecordset    = Nothing
Set objConnection   = Nothing

Response.Redirect ( "/admin/users/affiliates/" ) %>

Function openRecordSet(ByVal strSQL, ByRef objConnection) 
    On Error Resume Next 
    '   logSQL(strSQL) 
    Set openRecordset = objConnection.Execute(strSQL) 
    If err.Number <> 0 Then 
          'Response.Write Err.Number & " - " & Err.Description logError("ASP: openRecordset: " & Err.Number & " - " & Err.Description & ": " & strSQL) 
    '    Call displayErrorPage() 
    End If 
End Function

The error typically is caused by using Set to indicate assignment of an object to a variable, but having a non-object for the right value: 该错误通常是由于使用Set来指示对象已分配给变量,但具有正确值的非对象引起的:

>> Set v = New RegExp
>>                         [no news here are good news]
>> Set v = "a"
>>
Error Number:       424
Error Description:  Object required

So check your openRecordset function. 因此,请检查您的openRecordset函数。 Does it return a recordset by executing 它是否通过执行返回记录集

Set openRecordset = ....

(mark the Set ) for the given parameters? (将Set标记为给定参数)?

Update wrt comments: 更新wrt评论:

This test script: 这个测试脚本:

Option Explicit

' How to test the type of a function's return value that should
' be an object but sometimes isn't. You can't assign the return value
' to a variable because of VBScript's disgusting "Set".
WScript.Echo "TypeName(openConnectionAdmin()): ", TypeName(openConnectionAdmin())
WScript.Echo "TypeName(openRecordset(...))   : ", TypeName(openRecordset("", objConnection))

' Trying to create a connection and a recordset
Dim objConnection : Set objConnection = openConnectionAdmin()
Dim objRecordset  : Set objRecordset  = openRecordset("", objConnection)

Function openConnectionAdmin()
' Set openConnectionAdmin = CreateObject("ADODB.CONNECTION")
  Set openConnectionAdmin = Nothing
End Function

' After removing the comments: Obviously this is a function that
' hides all errors; the programmer should be fed to the lions.
Function openRecordSet(ByVal strSQL, ByRef objConnection)
    On Error Resume Next
    Set openRecordset = objConnection.Execute(strSQL)
End Function

output: 输出:

TypeName(openConnectionAdmin()):  Connection
TypeName(openRecordset(...))   :  Empty
... Microsoft VBScript runtime error: Object required: 'openRecordset(...)'

or 要么

TypeName(openConnectionAdmin()):  Nothing
TypeName(openRecordset(...))   :  Empty
... Microsoft VBScript runtime error: Object required: 'openRecordset(...)'

shows: By hiding every conceivable error in openRecordset() the function can return Empty (undetected!), which isn't an object and can't be assigned to a variable by using Set. 显示:通过在openRecordset()中隐藏所有可能的错误,该函数可以返回Empty(未检测到!),它不是对象,也不能使用Set分配给变量。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM