关于你的“使用组件封装数据库操作(二)”我有疑问,我按照你这篇文章所写,在ASP页面中执行到Set Rs=DataQuery.GetEmployeeList()时出现错误提示:
“ADODB.Recordset 错误 '800a0e7d' 连接无法用于执行此操作。在此上下文中它可能已被关闭或无效。 /test/page.asp,行 13 

请问如何解决?文章地址:http://dev.csdn.net/article/22/22628.shtm

解决方案 »

  1.   

    Conn.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Northwind;Data Source=yang"例子你运行成功了吗???
      

  2.   

    Flag = objtest.GetConn()
     flag 为true
      

  3.   

    VB里的程序
    Option ExplicitPrivate strSql  As String
    Private objConn As New Conn
    Private Rs As ADODB.Recordset
    Private Conn As ADODB.ConnectionPrivate MyScriptingContext As ScriptingContext
    Private objApplication As Application
    Private objRequest As Request
    Private objResponse As Response
    Private objServer As Server
    Private objSession As Session
    Public Sub OnStartPage(PassedScriptingContext As ScriptingContext)
       Set MyScriptingContext = PassedScriptingContext
       Set objApplication = MyScriptingContext.Application
       Set objRequest = MyScriptingContext.Request
       Set objResponse = MyScriptingContext.Response
       Set objServer = MyScriptingContext.Server
       Set objSession = MyScriptingContext.Session
    End SubPublic Sub OnEndPage()
       Set MyScriptingContext = Nothing
       Set objApplication = Nothing
       Set objRequest = Nothing
       Set objResponse = Nothing
       Set objServer = Nothing
       Set objSession = Nothing
    End SubPublic Function GetConn()    objConn.OpenDb (objApplication("DBLogin"))    If Err.Number <> 0 Then
            GetConn = False
        Else
            GetConn = True
        End If
    End Function
    Public Function GetEmployeeList() As ADODB.Recordset    
        Set Rs = New ADODB.Recordset    strSql = "select unid,content,title,intime from article_info"
        
        Rs.CursorLocation = adUseClient    Rs.Open strSql, Conn, adOpenStatic    Set GetEmployeeList = Rs    'rs.CloseEnd Function
      

  4.   

    Rs.Open strSql, objConn, adOpenStatic
      

  5.   

    还是不可以,其实我objconn里面就是一些Private objConn As New ADODB.Connection   '数据库连接
    Private objRs As New ADODB.Recordset      '数据库记录集Public Sub CloseDb()
        Set objRs = Nothing
        Set objConn = Nothing
    End SubPublic Sub CloseRs()
        Set objRs = Nothing
    End SubPublic Sub OpenDb(ByVal strConnection As String)
        objConn.Open strConnection
    End Sub
      

  6.   

    这样吧,我严格按照你的写,以为我conn的类里有opendb了,我在ASP页面中,直接写 
    set objconn = server.createobject("cmnoa.conn")
    objconn.opendb(application("DBLogin"))
    将数据库打开VB里还是用 Rs.Open strSql, Conn, adOpenStatic
    conn是此类中上面声明的Private Conn As ADODB.Connection
      

  7.   

    这样吧
    你把完整的工程发过来,我这边调试以下[email protected]
      

  8.   

    我已经发了,请查收,用YAHOO发的
      

  9.   

    最常见的:
    CMNOA 错误 '800a005b' 未设置对象变量或 With block 变量 /test/page.asp,行 8 
    是什么问题
      

  10.   

    conn没有实例化造成的
    奇怪,难道我把代码忘记写了修改如下,三种连接都可以
    Public Function GetConn()
    On Error Resume Next
        Set Conn = New ADODB.Connection
        Conn.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Northwind;Data Source=yang"
        'conn.open "Driver={Sql Server};Server=127.0.0.1;Uid=sa;Pwd=;Database=northwind"
        'Conn.Open objApplication("DBLogin")    If Err.Number <> 0 Then
            GetConn = False
        Else
            GetConn = True
        End If
    End Function
      

  11.   

    现在已经完全OK了,非常感谢你,顺便问一句,有的时候我写了好几个类,那类之间相互调用时,为什么会出现:
    CMNOA 错误 '800a005b' 未设置对象变量或 With block 变量 /test/page.asp,行 8 
    的问题?是不是之前我要
    Private objCommon As New Common在public function里还要
    set 什么东西呀?
      

  12.   

    类之间互相调用,需要实例化你先在vb工程组中测试,没有问题,在放到asp中测试每次重启iis,可方便组件的卸载删除