Microsoft small business knowledge base

Article ID: 304536 - Last Review: June 19, 2014 - Revision: 3.0

Hotfix Download Available
View and request hotfix downloads


When opening and closing connections or recordsets using the Microsoft ODBC Driver for Access or the Microsoft OLE DB Provider for Jet, the following error may be reported:
Object invalid or no longer set.
After this error is reported, no more recordsets or connections can be opened from the same process.

Other possible error messages reported to the client application include:
Too many tables open.
Cannot open any more tables.


To resolve this problem, install the latest Microsoft Jet 4.0 service pack 6. For additional information, click the following article number to view the article in the Microsoft Knowledge Base:
239114  ( ) How To: Obtain the Latest Service Pack for the Microsoft Jet 4.0 Database Engine


Microsoft has confirmed that this is a problem in the Microsoft products that are listed at the beginning of this article. This problem was fixed in Jet 4.0 Service Pack 6 (SP6).

More information

To reproduce the problem, run the following Microsoft Visual Basic for Applications (VBA) code:
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
        Set rs = Nothing

    Next i

End Sub
kbhotfixserver kbqfe kbjet kbprb KB304536
Retired KB ArticleRetired KB Content Disclaimer
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.
Additional support options
Ask The Microsoft Small Business Support Community
Contact Microsoft Small Business Support
Find Microsoft Small Business Support Certified Partner
Find a Microsoft Store For In-Person Small Business Support