limeiling
Messages postés3Date d'inscriptionvendredi 27 avril 2007StatutMembreDernière intervention 3 mai 2007
-
27 avril 2007 à 12:00
limeiling
Messages postés3Date d'inscriptionvendredi 27 avril 2007StatutMembreDernière intervention 3 mai 2007
-
3 mai 2007 à 11:57
Bonjour,
Je développe en VBA sous Access et j'aimerais copier une table liée dans une base mais sans conserver ces liens, ce qui me permettrait d'avoir une archive de table en quelque sorte. J'ai utilisé la fonction CopyObject() mais la table ainsi copiée est une table liée au final, ce qui ne m'arrange pas du tout.
Avez-vous une solution ? Merci de vos réponses. ;)
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 27 avril 2007 à 14:01
Salut, pour commencer tu as mal poster ta question car tu l'as mise dans la section VB.net. Ceci étant dit, moi ce que je ferais, c'est de créer une structure de table identique et de copies simplement les données. Le pb est que je sais pas ce qui est lié entre les 2 tables, les données ou le champs. Tu peux essayer de faire le test en copiant dans la nouvelles base que les données et pas la structure. Si ca marche pas, faudra aussi copier les données "à la main".
C'est un exemple avec un clé primaire (enleve si tu n'en as pas) et un champ qui contient un espace (il faut mettre les crochets). Le 50 veut dire que ton champ texte comporte 50 caractetes.
l'avantage d'Access, dans cette situation (il faut bien qu'il en ait!), c'est son ergonomie.
Tu ouvres la table liée, en mode "table de données", tu sélectionnes toutes les données (avec un bon [CTRL]+[A]), et tu les copie dans le presse-papiers.
Ensuite, suivant la version d'Access :
- si c'est Access 2002 ou 2003, tu dois pouvoir choisir de créer une table en fonction de saisie de données (façon de faire très curieuse, je le conçois, mais très utile dans le cas qui nous occupe, surtout quand il y a 40 champs, avec des propriétés bizarres, des valeurs par défaut, des valeurs de validation...)
- si tu n'as pas ce mode de création de table, tu prends ton courage à 2 mains (quoiqu'une suffise largement), et tu crées une table avec 1 seul champ (nom bidon, propriétés bidon...).
Une fois que tu as cette nouvelle table, tu la passes en mode "table de données", et tu colles les données du presse-papiers.
Là, si tout va bien, Access va couiner, en disant quelque chose du genre "c'est pas la bonne structure, pas la bonne taille de zone, blabla". Tu lui répond que tu ne veux pas voir tous les messages d'erreurs (fais-le, et tu verras après).
Et, tada, si la manip a réussi, tu as obtenu une nouvelle table, qui s'appelle "Table des Erreurs", qui a exactement la même structure que la table originelle, et qui en contient les données.
Tu peux dès à présent supprimer la table liée, si elle ne te sert plus (attention, les données ont été prises à un instant t, elles ne seront pas mises à jour comme si la table était toujours liée).
Si cette manip n'a pas fonctionné, manifestes-toi, je reviendrait!
à+
rvblog<sup>n
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!</sup>
limeiling
Messages postés3Date d'inscriptionvendredi 27 avril 2007StatutMembreDernière intervention 3 mai 2007 2 mai 2007 à 09:42
Merci pour vos réponses, et c'est vrai désolée je me suis gourrée de topic ! ^^'
Enfin bref, pour Nicko11, j'avais pensé à faire ça mais disons que c'est pas très pratique sachant qu'il est possible qu'on rajoute des champs à la table qu'on veut copier et dans ce cas la table copiée ne sera pas complète (en gros c'est pas super générique si on veut pouvoir modifier la table plus tard). Donc je ne sais pas trop si ça me conviendrait. Pour répondre à ta question, la table A est liée à une autre table B contenue dans une autre base B (donc liée aux données et aux champs). C'est à dire que si je fais une modif quelle qu'elle soit dans la base B, elle se répercute dans la base A. Comme l'a dit rvblog, je voudrais avoir une copie de B à l'instant t.
Ensuite, pour rvblog, je sais pas si on s'est bien compris mais je voudrais tout faire en code. Mon but est d'archiver des bases et des tables automatiquement pour éviter aux personnes qui s'en servent d'avoir à faire copier/coller manuellement. j'aurais voulu un truc (une fonction, une bidouille..) qui me permette de copier cette fichue table, puisqu'avec CopyObject ( ) conserve les liens de la table initiale.
Donc voilà peut-être que je suis un peu trop exigente dans mes critères mais bon ^^' Au pire je me contentrais de copier en fonction des champs etc. et ils se débrouilleront tant pis ... :p
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 2 mai 2007 à 10:29
LOL, non c'est pas trop exigeant mais fallait juste avoir plus de précision sur tes reelles attentes.
Ce que tu peuc faire, c'est tout faire "à la main", c'est à dire,
aller dans les base A et B, pour chaque champ de B, créer celui de A. Ensuite, pour chaque enregistrement de B, copie dans A. C'est possible en VB mais peut etre aussi en SQL mais la je suis pas pro.
Vous n’avez pas trouvé la réponse que vous recherchez ?
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 2 mai 2007 à 10:52
Bonjour ,
c' est le problème avec les tables liées.
En fait c' est pas un problème, c' est plutôt un avantage...
Solution:
Faire un replica de Table B ensuite copier Table A
Il n' y aura alors aucun problème...
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 2 mai 2007 à 11:04
petite remarque cependant:
Si ta table B éxiste déjà dans ta base Archive
il suffut de la mettre à jour en y ajoutant les
valeurs du lien qui n' y figurent pas