Je suis nouveau sur ce forum, mais je développe avec Access 2000 depuis 6 ans déjà.
Habituellement, je parviens à régler les bugs en consultant ce forum ou d'autre ressources sur Internet, mais cette fois-ci, je ne trouve rien qui ressemble à mon problème.
Voici ma situation:
J'ai 3 bases de données Access 2000 et je dois créer une seule nouvelle base de données Access 2000 qui contient l'ensemble de toutes les tables des 3 BD.
Pour y parvenir, je pourrais bien sûr importer les tables de toutes les BD dans une nouvelle BD Access 2000, mais je veux permettre à l'utilisateur (mon client) de choisir les 3 BD à combiner et éventuellement lui permettre d 'en choisir 4, 5...
Jusqu'ici tout va bien.
Je me suis dit que si l'utilisateur choisit 2 BD dont une ou plusieurs des tables comporte le même nom, il y aurait un problème. C'est pourquoi je fait une simple petite manipulation sur les tables avant d'en faire la copie: je renomme chaque table en y ajoutant un suffixe différent pour chaque BD. De cette façon, je suis presque sûr que les tables n'auront pas le même nom.
J'ai donc conçu un programme Access 2000 qui utilise DAO 3.6. Une des tables retient le chemin d'accès vers les BD à combiner, leur mot de passes et leurs suffixe.
Lorsque l'utilisateur appuie sur le bouton "Combiner", le code s'exécute, produisant une erreur.
Je vais expliquer sous peu l'erreur en question, mais laissez-moi vous parlez du code qui s'exécute.
Le code est simple. Si quelqu'un le demande, je vais le publier ici, mais je ne crois pas que ce soit pertinent puisque le code en tant que tel est impecable. Pour l'instant, je vais seulement inclure un pseudo-code afin d'expliquer le problème.
//Début du pseudo-code
Création d'une nouvelle BD Access 2000
Ouverture de la table qui contient l'information sur les BD à combiner
Loop à travers toute les BD à combiner
Connection à la BD i en utilisant le bon mot de passe
Loop à travers toutes les tables (les objets TableDefs) de la BD i
Si la table n'est pas une table système ou une table cachée Alors
Création d'un nouvel objet TableDef nommé TD
//L'objet TD a comme structure source la Table j
//L'objet TD a le même nom que la table j plus le suffixe
Loop à travers tous les champs de la table j
Ajout du champ k à la colletcion Fields de l'objet TD
FinLoop
Ajout de l'objet TD à la collection TableDefs de la nouvelle BD
FinSi
FinLoop
Exéction d'un requête SQL SELECT INTO
//la requête SELECT INTO envoie les données dans la nouvelle table
FinLoop
//Fin du pseudo-code
Ce code marche dans plusieurs cas. Dailleurs, je croyais que le programme fonctionnait jusqu'à ce que je l'installe chez mon client.
Voici mon problème:
Lorsque j'essaye de combiner les 3 BD en question, le programme plante sur la toute première table avec l'erreur 3190 "Too many fields defined". Trop de champs définis? Je n'en ai que 12 dans cette table!
En effet, le programme plante sur une table qui n'a que 12 champs. Comment Access, VBA ou DAO fait pour croire que j'ai dépassé la limite de 255 champs? Je fais pratiquement une copie conforme des tables! (mis à part le fait que je les renomme)
Quelqu'un a une idée?
Merci d'avoir eu la patience de lire mon message.
wizlord
Partager