代码之家  ›  专栏  ›  技术社区  ›  ObiWanKenobi

什么是VBScript错误代码0x800A01FB

  •  1
  • ObiWanKenobi  · 技术社区  · 17 年前

    每隔一段时间,我就会在ASP页面上收到以下错误消息:

    Microsoft VBScript runtime (0x800A01FB)
    An exception occurred: 'objPSM.GetValue'
    

    如果我重新加载页面,它就会工作。

    http://support.microsoft.com/kb/262681 ),但这不适用于我的问题,因为我没有使用Session对象——我有自己的会话处理代码,它使用Cookie和数据库来存储状态。

    以下是弹出的VB代码:

    Public Function GetValue(ByVal pSessionID As String, _
                             ByVal pName As String) As String
    
       Dim ErrSource As String
       Dim ErrNumber As Long
       Dim ErrDescription As String
    
       On Error GoTo Err_Handler
    
       Dim lConn As ADODB.Connection
       Dim cmd As ADODB.Command
    
       Dim lReturnValue As String
    
       Set lConn = GetDBConn
       Set cmd = CreateObject("ADODB.Command")
       cmd.ActiveConnection = lConn
       cmd.CommandText = "pss_getvalue"
    
       cmd.Parameters.Append cmd.CreateParameter("p_pss_id", adVarChar, adParamInput, 36, pSessionID)
       cmd.Parameters.Append cmd.CreateParameter("p_pss_name", adVarChar, adParamInput, 35, pName)
       cmd.Parameters.Append cmd.CreateParameter("p_pss_value", adVarChar, adParamOutput, 255)
    
       cmd.Execute , , adCmdStoredProc
    
       lReturnValue = Nvl(cmd.Parameters("p_pss_value").Value, "")
    
       lConn.Close
       Set cmd = Nothing
       Set lConn = Nothing
    
       GetValue = lReturnValue
    
    Exit_Procedure:
       Exit Function
    
    Err_Handler:
       ErrSource = Err.Source
       ErrNumber = Err.Number
       ErrDescription = Err.Description
       On Error Resume Next
       Call LogEvent(ErrSource & ".GetValue: ", ErrNumber & ": " & ErrDescription)
       GetValue = ""
       GoTo Exit_Procedure
    End Function
    

    4 回复  |  直到 17 年前
        1
  •  1
  •   AnthonyWJones    17 年前

    此错误最可能的来源是ADODB。看 why-do-i-get-800a01fb-errors .

    由于COM类是您自己的,您是否考虑过将调试器附加到运行ASP的进程,并查看COM代码中发生错误的位置?在COM代码中添加一些错误处理以在错误离开组件之前生成有关错误的更多详细信息失败了吗?

        2
  •  1
  •   ObiWanKenobi    17 年前

    与托管提供商进行了交谈,他们回收了IIS应用程序池。错误消失了。

        3
  •  0
  •   azheglov    17 年前

    所有这些错误代码都在winerror.h中定义(谷歌搜索得到此链接: winerror.h 首先阅读32位错误代码格式,了解每个位的含义,以便将来了解类似的错误代码。

    01FB是错误代码: CO_E_OBJNOTREG (对象未注册)

    00A是指发生错误的“设施”:

    #define FACILITY_CONTROL 10

        4
  •  0
  •   littlegeek littlegeek    17 年前

    看起来-objPSM可能正在将带有adUseClient的RecordSet用作RecordSet或连接对象上的参数之一,因为它正在GIT中使用。

    COM提供了一个名为全局接口表(GIT)的组件。GIT允许应用程序在表中存储对对象接口的引用,以便随时检索接口指针。当将接口指针存储到GIT中时,会向对象查询IMarshal,如果对象公开了IMarshal的数据,则对象的封送数据会被放入流中,在稍后检索接口指针时可以在流中检索到它。IMarshal由客户端游标公开,客户端游标实际负责传递记录集数据。 如果将使用adUseClient的打开的ADO记录集对象放入GIT中,然后从表中撤销,则会出现问题。将发生访问违规。 为了避免这个问题,在对记录集调用Open之前,将记录集的接口指针放入GIT中。这将在调用客户端游标引擎之前将接口指针放置在GIT中,这将基本上导致标准封送处理的发生,而不是记录通过IMarshal从游标引擎流式传输的数据。在这种情况下,只会存储指向ADO记录集接口的指针,这是程序员的真正意图。" http://support.microsoft.com/kb/249175/EN-US/

    了解编组 http://support.microsoft.com/kb/248287/EN-US/

    看起来这在MDAC 2.6中已经修复了

    如何检查MDAC的服务器版本 http://support.microsoft.com/kb/301202

    推荐文章