Home
Home

---Soumis par Keri Hardwick---

Error 3014 - Can't Open Any More Tables

(Q)  J'obtiens une erreur mentionnant qu'il est impossible d'ouvrir d'autres tables. Comment résoudre cette erreur?

(A)    La meilleure solution est de charger et d'installer la mise-à-jour  Jet 3.5:

Download    Télécharger Jet35Upd.Exe

Le fait de doubler le nombre de tables de références de 1026 à 2048 peut faire toute la différence.

Si vous désirez en savoir plus au sujet de cette erreur, poursuivre la lecture. En passant, ceci provient de la documentation de Jet 3.5, j'ignore si c'est applicable aux versions antérieures.

L'erreur 3014 est une erreur de Jet, non d'Acces. Même si le mesage refère à l'ouverture de tables, cette erreur n'est que de très loin reliée au nombre de tables que vous pouvez effectivement ouvrir. En fait, il s'agit de tables de référence de Jet. Malheureusement, il y a peu de bonnes documentations sur la fréquence et le nombre de tables de références utilisées par Jet et, en bref, vous ne pouvez pas le déterminer autrement que par essaie et erreur.

Mille vingt-quatre (2048 avec la mise-à-jour) références sont permises. C'est une limite fixe qui n'a rien à voir avec la quantité de mémoire disponible. Il sera inutile d'augmenter la quantité de mémoire pour résoudre ce problème précis. J'ai noté que si la quantité de mémoire est limitée (comme dans le cas où d'autres applications sont actives), vous obtenez plutôt l'erreur "MS Access has performed an illegal operation" et Access termine.

Quatre choses qui possèdent un impact certain sur le nombre de tables de référence - avant d'entrer dans l'utilisation de la Replication:

1. Formulaires ouverts. Plus le record_source utilise de tables, via une requête, pour le formulaire ou ses sous-formulaires, plus de tables de références sont ouvertes et ce, même si les formulaires ou sous-formulaires sont invisibles. Si on utilise un Tab-control avec des sous-formulaires, il est préférable de n'assigner le recordsource de ce sous-formulaire que s'il devient visible, par exemple, lors du changement de page du tab-control (contrôle à onglets). Les requêtes ont un impact sur le nombre de tables de référence.

2. Liste et combo boxes - chacun de ces contrôles sont des utilisateurs de tables de référence tant que le formulaire est ouvert.

3. Le nombre de recordset objet ouverts. Les fermer explicitement aussitôt que possible.

4. Les fonctions qui utilisent des recordset. Par exemple, avec une fonction qui retrouve un champ passé comme paramètre d'une table à un seul enregistrement, table à être ouverte par la fonction. La fonction ferme la table après lecture et retourne la valeur lue. Jappellais cette fonction dans plusieurs requêtes pour divers sous-formulaires et formulaires pop-ip. J'ai trouvé que je m'éloignais du problème des tables de références si je n'effectuais qu'une seule lecture, en initialisation de la base de données, et que je sauvegardais cette valeur plutôt que de la relire via la fonction décrite précédamment.

Si on utilise la réplication, je n'ai pas trouvé de documentation à ce sujet, mais si votre application navigue autour de la limite de tables de référence risque surement de rencontrer cette limite plus rapidement si la replication est en utilisation. Je ne peux que présupposer que Jet utilise un bon nombre de tables de référence pour gérer le processus de réplication (ie.: déterminer si un enregistrement fut modifié, ...).

J'admets que ce n'est pas une panacée, mais après plusieurs heures de travail sur les items 1 à 4 ci-dessus, je vous assure que celà a un impact lorsque vous rencontrez le dit message d'erreur.

Mais une dernière fois, c'est la mise-à-jour de Jet qui a le plus d'influence pour régler ce problème!