1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Problema em ASP

Discussão em 'Web Development' iniciada por crisleiria, 2 de Abril de 2008. (Respostas: 10; Visualizações: 1395)

  1. Viva,

    precisava de uma ajudinha... Tenho uma aplicação em ASP puro que existe em dois servidores diferentes. As aplicações são iguais e num dos servidores aparece-me este erro:

    ADODB.Connection error '800a0e78'
    Operation is not allowed when the object is closed.
    /website/ExternalApplications/GestorDocumentosGeral/componentes/clsDriver.asp, line 87



    Estive a pesquisar e o erro é pouco específico... Num dos servidores funciona perfeitamente e no outro estoira!

    A base de dados e respectiva connection String é a mesma. Base de Dados SQL SERVER 2000. O driver de acesso à BD é ODBC.
     
  2. Santo38

    Santo38 Power Member

    Já perguntaste a quem aloja ou gere os servidores se te pode ajudar? O teu problema soa a "servidores com diferentes configurações".

    Saudações
     
  3. Pois, eu tenho acesso aos servidores e respectivas configurações:

    Servidor 1 -> Windows Server 2000 Framework 1.1
    Servidor 2 -> Windows Server 2003 Framework 3.5 e frameworks anteriores...

    A aplicação funciona no Servidor 1 sem problemas, mas no servidor 2 tenho o erro acima descrito..
     
  4. Santo38

    Santo38 Power Member

    Tens acesso de Administrator a ambos os servidores? É que nesse caso tens de comparar os ficheiros/parametros de configuração de cada um para veres onde estão as diferenças e corrigires... O erro é demasiado genérico para apontar para determinado local.

    Saudações
     
  5. Santo38

    Santo38 Power Member

  6. motunning

    motunning Power Member

    eu nao precebo muito disso porque ainda programei pouco em asp, mas isso parece um erro por falta de permissoes ao aceder a base de dados!! a ultima linha, penso que é a linha onde o programa para, ou seja, a partir dai e que está o erro, ou entao como ja tinham dito, algo que o servidor esteja a negar acesso!!

    Cumprimentos
     
  7. Armadillo

    Armadillo Folding Member

    a connection string nao pode ser a mesma, simplesmente porque as maquinas aonde estão a correr sao diferentes, logo as instancias do SQL (poderão)serão diferentes.

    cumprimentos
     
    Última edição: 3 de Abril de 2008
  8. Tenho acesso de administração a ambos os servidores. Em termos de configuração, são idênticas dentro do possível visto estarmos a falar de ambientes um pouco diferentes.
    Já tinha visto o link acima, refere-se a Session Pooling do Driver ADO. Mas eu não estou a instanciar sessões, por isso não deve ser por ai...
    Eu estou a usar uma classe que serve de driver para acesso à BD. Penso que esta classe esteja correcta, visto estar a ser utilizada em mais aplicações. Mas de qualquer das formas ai vai o código:

    Código:
    Class clsDriver
        ' *** Membros da classe ***
        
        Private m_connString
        Private m_conn
        
        ' *** Propriedades da classe ***
        
        ' Obtem ou atribui o valor da ConnectionString
        Public Property Get ConnectionString()
            ConnectionString = m_connString
        End Property
        Public Property Let ConnectionString(connString)
            m_connString = connString
            If Not m_conn Is Nothing Then
                m_conn.ConnectionString = m_connString
            End If
        End Property
        
        public property get Errors()
            set Errors = m_conn.Errors
        end property
        
        Private Sub Class_Initialize()
            m_connString = Application("ConnectionString")
            Set m_conn = Nothing  
        End Sub    
        
        Private Sub Class_Terminate()
            'If Not m_conn Is Nothing Then
            '    If m_conn.State <> adStateClosed Then
            '        m_conn.Close
            '    End If
            '    Set m_conn = Nothing
            'End If
        End Sub
        
        Public Function OpenConnection()
            If m_conn Is Nothing Then
                Set m_conn = Server.CreateObject("ADODB.Connection")
                ' m_conn.Provider = "sqloledb"
            End If
            If m_conn.State = adStateOpen Then
                Set OpenConnection = m_conn
                Exit Function
            End If
            If m_conn.State <> adStateClosed Then
                m_conn.Close
            End If
            m_conn.Open m_connString        
            Set OpenConnection = m_conn        
        End Function
        
        Public Sub BeginTransaction()
            If Not m_conn Is Nothing Then
                m_conn.BeginTrans()
            End If
        End Sub
        
        Public Sub Commit()
            If Not m_conn Is Nothing Then
                m_conn.CommitTrans()
            End If
        End Sub
            
        Public Sub Rollback()
            If Not m_conn Is Nothing Then
                m_conn.RollbackTrans()
            End If
        End Sub
        
        Public Function CreateStoredProc(sProcName)
            Dim oCmd : Set oCmd = New clsStoredProc
            oCmd.Init m_conn, sProcName
            Set CreateStoredProc = oCmd
        End Function
        
        ' Executa uma consulta SQL e devolve o recordset
        ' Quem executa esta funcao tem a responsabilidade de fechar o Recordset
        ' O RecordSet devolvido é read-only e forward-only
        Public Function ExecuteQuery(strQry)        
            Dim objRS
            Set objRS = m_conn.Execute(strQry)        
            Set ExecuteQuery = objRS        
        End Function
        
        ' Executa uma consulta SQL a partir de um Recordset ja existente
        Public Sub ExecuteQueryWithRS(objRS, strQry)        
            If objRS.State <> adStateClosed Then
               objRS.Close
            End If
           
            objRS.Open strQry, m_conn
        End Sub
        
        Public Function ExecuteNonQuery(strQry)        
            Dim intRecAffected
            m_conn.Execute strQry, intRecAffected, adExecuteNoRecords        
            ExecuteNonQuery = intRecAffected        
        End Function
        
        Public Function ExecuteScalar(strQry)
            dim oRS        
            set oRS = m_conn.Execute(strQry)
            if not oRS.EOF then
                ExecuteScalar = oRS.Fields(0).Value
            else 
                ExecuteScalar = empty
            end if
            oRS.Close
            set oRS = nothing
        End Function
    End Class
    
    ' Classe que encapsula um ADODB.Command
    
    Class clsStoredProc
        Private m_cmd
        private m_returnValue
        
        public property get ReturnValue
            ReturnValue = m_returnValue
        end property
        
        public property get Parameters()
            set Parameters = m_cmd.Parameters
        end property
        
        Private Sub Class_Initialize()
        End Sub
        
        Public Sub Init(oConn, sProcName)
            Set m_cmd = Server.CreateObject("ADODB.Command")
            m_cmd.ActiveConnection = oConn
            m_cmd.CommandText = sProcName
            m_cmd.CommandType = adCmdStoredProc
            AddParameter "@RetVal", adInteger, adParamReturnValue, , 0
        End Sub
        
        
        Private Sub Class_Terminate()
            Set m_cmd = Nothing
        End Sub
        
        Public Sub AddParameter(sName, adoType, adoDirection, nSize, oValue)
            With m_cmd
                If IsNumeric(nSize) Then
                    If nSize = 0 Then nSize = 1
                End If
                .Parameters.Append .CreateParameter(sName, adoType, adoDirection, nSize, oValue)
            End With
        End Sub
        
        Public Function Exec()
             Set Exec = m_cmd.Execute()
             m_returnValue = m_cmd("@RetVal").Value
        End Function
    End Class
    %>
    Mas obrigado pela ajuda

    Os servidores onde estão alojados a aplicação são diferentes mas o servidor de Base de Dados é o mesmo. Ambas as aplicações partilham a Base de Dados.
    Assim, a connection string é a mesma, o que pode mudar (é diferente na versão) é o driver de acesso à base de dados.
    Num servidor, a aplicação corre sem problemas, no outra estoira sempre que quero fazer um insert, update ou delete.
     
    Última edição pelo moderador: 3 de Abril de 2008
  9. SkylineGTR

    SkylineGTR Power Member

    Vi o código na diagonal.. mas fizeste o open() ao teu objecto de conecção?
     
  10. Viva, sim claro! Tanto é que consigo fazer selects! O problema parece estar nos insert, updates ou deletes!!
     
  11. motunning

    motunning Power Member

    boas!
    gostava de saber como consigo activar o separador Segurança nas propriedades de uma BD?
    Visto que sou o Administrador do Computador esse separador aparece na mesma?

    motunning
     

Partilhar esta Página