Copier une table dans une base sans les liens

Signaler
Messages postés
3
Date d'inscription
vendredi 27 avril 2007
Statut
Membre
Dernière intervention
3 mai 2007
-
Messages postés
3
Date d'inscription
vendredi 27 avril 2007
Statut
Membre
Dernière intervention
3 mai 2007
-
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. ;)

7 réponses

Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
1
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".

Pour créer la table, je fais une requete SQL:

        'Création d'une table temporaire
SQL = "CREATE TABLE Table_Temp(" & _
      "Champ1 Numeric PRIMARY KEY," & _
      "Champ2 Text(50)," & _
      "Champ3  Text(50)," & _
      "[Champ 4]   Text(50));"


DoCmd.RunSQL SQL

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.
Messages postés
792
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
Salut  1047033 limeiling, salut =999867 Nicko11,

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>
Messages postés
3
Date d'inscription
vendredi 27 avril 2007
Statut
Membre
Dernière intervention
3 mai 2007

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
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
1
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.
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
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...
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
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
Messages postés
3
Date d'inscription
vendredi 27 avril 2007
Statut
Membre
Dernière intervention
3 mai 2007

Je vais essayer ça =) merci tout le monde =x