Bugs: Error 3014 - Can't Open Any More Tables |
Author(s) 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:
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!
|