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

Este artigo foi publicado anteriormente em PT304536
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.
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ívelno 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.ConnectionDim cmd As ADODB.CommandDim rs As ADODB.recordsetDim 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 iEnd Sub 
Propriedades

ID do Artigo: 304536 - Última Revisão: 04/13/2006 11:13:00 - Revisão: 5.0

  • Controlador Microsoft Open Database Connectivity para Access 4.0
  • Fornecedor OLE DB da Microsoft para Jet 4.0
  • kbqfe kbhotfixserver kbgrpdsvcdb kbjet kbprb kbqfe KB304536
Esta informação foi útil?