Home  |  About  |   Search   

What's New
Table Of Contents
10 Commandments 

RunCommand Constants

Terms of Use


Bugs: Error 3014 - Can't Open Any More Tables

Keri Hardwick

(Q)  I'm getting "Error 3014 - Can't Open Any More Tables."  What can I do to solve it.

(A)    The best solution is to download and install the Jet 3.5 Update:

      Download Jet35Upd.Exe (SP3)

This doubles the number of "table references" from 1024 to 2048 and will make a tremendous difference.

If you want to know more about this error, read on. BTW, this is all from Jet 3.5 documentation, I don't know about prior versions.

Error 3014 is a Jet error, not an Access error. Although the message refers to opening "tables," the error is only roughly related to the actual number of Access tables you have open. They are, instead, referring to Jet Table References. Unfortunately, there is no good documentation describing the frequency and quantity of Jet's use of these references. In short, you never can determine when you're going to hit this error until you do.

You are allowed 1024 (2048 w/Jet upgrade) of these references. It is a fixed limit and has nothing to do with available memory. Beefing up the machine will not help. I have noticed that if memory is scarce (for example, other applications are active) you will not get the Jet error message, you will get the "MS Access has performed an illegal operation" message and Access will shut down.

Here are 4 things that definitely impact the number of table references - before replication enters the picture:

1. Open forms. The more tables a form's (or subform's) record source query uses, the more table references are used. The more subforms appearing on a main form, the more table references used - even if they are not visible. One trick is to only assign a recordsource to a subform if the subform will be viewed (ex. if you use tabs, set the record source OnClick of the tab). Requeries impact the number of references.

2. List and combo boxes - eat up table references while the form is open.

3. Open recordset objects. Explicitly close them as soon as you are done.

4. Functions which use recordsets. Example - I had a function which opened a table recordset to pull the one field of the one record in that table (stored a date parameter). It closed the recordset as soon as the value was read. I was calling this functions in many queries for subforms and pop-up forms. I found I gained the ability to have many, many more table references when I called the function only on my start up form and then referenced that form field everywhere else.

Then replication comes into the picture. I have found no documentation regarding this subject, but an application for which the table reference limit had been worked around to perfection suddenly hit the limit much sooner when the back end tables became replicas instead of "plain" data tables. I can only assume that Jet keeps open a bunch of table references in order to manage the replication process (i.e., determining when a record has changed, etc.)

Granted, this isn't definitive, but I do know from many hours of tweaking that working on items 1 - 4 above will impact when you get the message.

Again, upgrading Jet makes the biggest difference of all!

1998-2009, Dev Ashish & Arvin Meyer, All rights reserved. Optimized for Microsoft Internet Explorer