CORRECÇÃO: Erro 'Objecto inválido ou que já não se encontra definido' com o Microsoft Jet

Traduções de Artigos Traduções de Artigos
Artigo: 304536 - Ver produtos para os quais este artigo se aplica.
Este artigo foi publicado anteriormente em PT304536
Expandir tudo | Reduzir tudo

Sintomas

Ao abrir e fechar ligações ou conjuntos de registos utilizando o controlador ODBC da Microsoft para o Access ou o fornecedor OLE DB da Microsoft para o Jet, poderá ser registado o seguinte erro:
Objecto inválido ou que já não se encontra definido.
Após a apresentação deste erro, já não é possível abrir outros conjuntos de registos ou ligações do mesmo processo.

Seguem-se outras mensagens de erro que podem ser apresentadas na aplicação cliente:
Demasiadas tabelas abertas.
Não é possível abrir mais tabelas.

Resolução

Para resolver este problema, instale o Microsoft Jet 4.0 Service Pack 6 (SP6). Para transferir o Microsoft Jet 4.0 SP6, consulte um dos seguintes artigos na base de dados de conhecimento da Microsoft (KB, Microsoft Knowledge Base):
239114 ACC2000: Versão actualizada do Microsoft Jet 4.0 disponível no centro de transferências
282010 ACC2002: Versão actualizada do Microsoft Jet 4.0 disponível no centro de transferências (Download Center)

Ponto Da Situação

A Microsoft confirma que este problema ocorre nos produtos referidos na secção "A informação contida neste artigo aplica-se a". Este problema foi resolvido no Jet 4.0 Service Pack 6 (SP6).

Mais Informação

Para reproduzir o problema, execute o seguinte código de Microsoft Visual Basic for Applications (VBA):
 
Public Sub Jet_TableID_Repro()
Dim conn As ADODB.Connection
Dim cmd As ADODB.Command
Dim rs As ADODB.recordset
Dim i As Long
    
    Set conn = New ADODB.Connection
    ' Modifique esta cadeia de ligação de modo a apontar para uma base de dados vazia.
    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\YourTestDatabase.mdb;"
    
    ' Interrompa e crie novamente a consulta de teste.
    On Error Resume Next
    conn.Execute "drop procedure sp_param_test", , adExecuteNoRecords
    On Error GoTo 0
    conn.Execute "create procedure sp_param_test as " & _
                 "parameters iInput Long; " & _
                 "select iInput as iOutput;", , adExecuteNoRecords
    
    For i = 1 To 10000

        ' Pode ocorrer um erro no código por volta das 2000-3000 iterações.
        Set rs = New ADODB.recordset
        Set cmd = New ADODB.Command
        Set cmd.ActiveConnection = conn
        cmd.CommandType = adCmdStoredProc
        cmd.CommandText = "sp_param_test"
        cmd.Parameters.Append cmd.CreateParameter("iInput", adInteger)
        cmd.Parameters(0).value = 12

        ' Esta operação falhará por volta das 2000-3000 iterações.
        rs.Open cmd, , adOpenKeyset, adLockOptimistic
        Set cmd = Nothing
        Debug.Print i
        DoEvents
        rs.Close
        Set rs = Nothing

    Next i

End Sub 

Propriedades

Artigo: 304536 - Última revisão: 13 de abril de 2006 - Revisão: 5.0
A informação contida neste artigo aplica-se a:
  • Controlador Microsoft Open Database Connectivity para Access 4.0
  • Fornecedor OLE DB da Microsoft para Jet 4.0
Palavras-chave: 
kbqfe kbhotfixserver kbgrpdsvcdb kbjet kbprb kbqfe KB304536
Exclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com