CORRECTIF : Des erreur « Objet non valide ou n’est plus défini » avec Microsoft Jet

Exclusion de responsabilité du contenu obsolète de la base de connaissances

Cet article a été rédigé sur les produits pour lesquels Microsoft n’offre plus aucune prise en charge. Par conséquent, cet article est proposé « en l’état » et ne sera plus mis à jour.

Symptômes

Lors de l’ouverture et de fermeture des connexions ou des jeux d’enregistrements à l’aide du pilote Microsoft ODBC pour l’accès ou le fournisseur Microsoft OLE DB pour Jet, le message d’erreur suivant peut s’afficher :
Objet non valide ou n’est plus défini.
Une fois que cette erreur est signalée, pas plus de jeux d’enregistrements ou de connexions peuvent être ouvert à partir du même processus.

Autres messages d’erreur possibles signalées à l’application client sont les suivantes :
Trop de tables ouvertes.
Impossible d’ouvrir plus de tables.

Résolution

Pour résoudre ce problème, installez le dernier Microsoft Jet 4.0 service pack 6. Pour plus d’informations, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :

239114 Comment : obtenir le dernier Service Pack pour le moteur de base de données Microsoft Jet 4.0

État

Microsoft a confirmé qu’il s’agit d’un problème dans les produits Microsoft répertoriés au début de cet article. Ce problème a été corrigé dans Jet 4.0 Service Pack 6 (SP6).

Plus d'informations

Pour reproduire le problème, exécutez le de Visual Basic pour Applications Microsoft suivantes du code (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

Propriétés

ID d'article : 304536 - Dernière mise à jour : 26 janv. 2017 - Révision : 2

Commentaires