Fulgy
Messages postés85Date d'inscriptionmercredi 21 juillet 2004StatutMembreDernière intervention 5 octobre 2004
-
9 sept. 2004 à 10:06
Fulgy
Messages postés85Date d'inscriptionmercredi 21 juillet 2004StatutMembreDernière intervention 5 octobre 2004
-
9 sept. 2004 à 15:06
Bonjour à tous.
Je travail sous VB6 pour attaquer des bases access 2000/97 en local et je souhaiterais créer une table ayant la même structure qu'une déjà existante dans la base de travail et tout ça de manière générique. J'ai trouvé des informations pour réaliser cela en DAO mais rien en ADO (le modèle que j'utilise). Dans ma recherche j'ai trouvé des débuts de solutions:
- une instruction SQL qui copie la structure d'une table:
"CREATE TABLE " & NewTable & " AS SELECT * FROM " & SrcTable, mais VB me dit qu'il y a une erreur dans cette instruction (j'ai trouvé cette requête sur le forum).
- créer une table vide en SQL puis la remplir:
"CREATE TABLE " & NewTable, puis je recopie la collection Fields du RecordSet de ma table source dans un RecordSet pour ma table de destination, mais pour créer/ajouter des item Field à un RecordSet il faut utiliser la méthode Append mais à ce moment là il ne faut pas que le RecordSet soit ouvert et je n'arrive pas à "injecter" la collection Fields de mon RecordSet une fois recopié dans ma table de destination. En plus de ça, si je crée une table vide, je n'arrive pas à la récupérer avec un OpenSchema ou une instruction SQL et je suis donc obligé de créer un champ temporaire.
- créer une table avec un champ temporaire:
"CREATE TABLE " & NewTable & "(TMP TEXT(25))", puis je récupère avec un RecordSet la structure de la nouvelle table pour ajouter des champ mais je n'y arrive pas (problème de contexte), et de toute façon cette méthode de champ temporaire me plait pas trop.
- créer une table en SQL avec les champ directement:
"CREATE TABLE " & NewTable & "(" & Field1 & " " & FieldType "(" & FiledSize & ")" ... & ")", mais le problème est que les type des champs, je les récupère avec un RecorSet (collection Fields) et que j'obtient des constantes VB que je ne peux pas retranscrire en chaine de caractères qui me donnerai le type du champ en SQL (parce-que je n'ai pas le tableau des correspondances).
Voilà où j'en suis. Merci d'avance à ceux qui vont m'aider à résoudre ce problème.
RicoNuch
Messages postés140Date d'inscriptionmercredi 18 juin 2003StatutMembreDernière intervention16 décembre 2006 9 sept. 2004 à 14:31
Le problème, c'est que "Select...Into" insère des enregistrements... peut-être en mettant un critère de sélection dans ta requête, mais si la procédure doit rester générique ça risque d'être galère.
Tu dis que tu n'as pas le tableau des correspondances pour les types de données. Tu n'a pas l'aide pour "Jet SQL" ? Cherche sur ta machine si tu n'as pas un fichier nommé "JETSQL35.HLP", il est installé discrètement en même temps que les objets d'accès aux données. Les infos que tu y trouveras vaudront largement les conseils que je pourrais te donner...
Fulgy
Messages postés85Date d'inscriptionmercredi 21 juillet 2004StatutMembreDernière intervention 5 octobre 2004 9 sept. 2004 à 13:27
Merci pour ta réponse j'ai résolu mon problème grâce à toi. Juste que tous les enregistrements de la table source sont recopiés. Bon je peux tous les effacés après avoir copié la table, mais si je pouvais juste copier la structure de la table source, je pense que ça ferai gagner du temps à mon programme. Une p'tite idée?? Encore merci.
Fulgy
Messages postés85Date d'inscriptionmercredi 21 juillet 2004StatutMembreDernière intervention 5 octobre 2004 9 sept. 2004 à 15:06
Tant pis c'est pas grave, je recopie la table source avec tous ses enregistrements et ensuite je fais un DELETE *, comme ça j'ai ce que je voulais :) Sinon j'ai bien trouvé le fichier d'aide planqué, j'ai pas chercher si il me donnait les correspondances constantes VB -> type SQL mais c'est pas grave j'en ai plus besoin pour l'instant, je chercherais quand ce sera le cas. Merci de m'avoir aidé à réglé mon problème. A+