REVISIÓN: Error de "Objeto no válido o no tiene valor" con Microsoft Jet

Exención de responsabilidades de contenido KB retirado

Este artículo se refiere a productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Síntomas

Al abrir y cerrar conexiones o conjuntos de registros mediante el controlador ODBC de Microsoft Access o el proveedor de Microsoft OLE DB para Jet, puede presentarse el siguiente error:
Objeto no válido o no tiene valor.
Después se informa de este error, no hay más conexiones o conjuntos de registros se pueden abrir desde el mismo proceso.

Otros posibles mensajes de error a la aplicación de cliente incluyen:
Hay demasiadas tablas abiertas.
No se puede abrir más tablas.

Solución

Para resolver este problema, instale Microsoft Jet 4.0 service pack 6 más reciente. Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

239114 Cómo: obtener el Service Pack más reciente para el motor de base de datos de Microsoft Jet 4.0

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados al principio de este artículo. Este problema se corrigió en el Service Pack 6 (SP6) de Jet 4.0.

Más información

Para reproducir el problema, ejecute el siguiente ejemplo de Microsoft Visual Basic para Aplicaciones código 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
' Modify this connection string to point to some blank database.
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\YourTestDatabase.mdb;"

' Drop and re-create test query.
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

' Code should fail at around 2000-3000 iterations.
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

' This will fail at around 2000-3000 iterations.
rs.Open cmd, , adOpenKeyset, adLockOptimistic
Set cmd = Nothing
Debug.Print i
DoEvents
rs.Close
Set rs = Nothing

Next i

End Sub

Propiedades

Id. de artículo: 304536 - Última revisión: 9 ene. 2017 - Revisión: 1

Comentarios