Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/05/2011, 11h05   #1
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 37
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 37
Points : 11
Points : 11
Par défaut Copier une table d'une base dans une autre

Bonjour,

Je cherche le code VBA qui permet de copier une table X d'une base B1 vers une base B2, au départ de la base B2.

Lier la table X dans B2 n'est pas une bonne solution dans mon cas, pour des raisons de performance (B1 et B2 sont sur des serveurs différents et B2 sert de datawarehouse pour une application BI).

La solution SQL n'est pas satisfaisante (SELECT * INTO X2 FROM X1, où X1 est un lien vers la table X dans B1) : la création de X2 est assez rapide, mais il faut ensuite créer la clé primaire et les index dans X2 (également en SQL) et ça, ça prend beaucoup trop de temps.

Reste donc la copie de la table (avec ses index).

Merci d'avance pour vos conseils et aides.

JL
voxov est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 12h15   #2
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 863
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 863
Points : 10 737
Points : 10 737
Envoyer un message via MSN à jpcheck
Salut,

en utilisant des boucles for each de ta table d'origine, t'est-il possible de creer d'abord ta table finale, puis d'importer les data via une requete ?

ton temps de traitement devrait deja etre tres reduit

Cette partie du tutorial sur DAO de Tofalu devrait te permettre de faire cela :
http://warin.developpez.com/access/d...=partie_4#L4.3
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 10h28   #3
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 37
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 37
Points : 11
Points : 11
Merci pour ta réponse.

J'espérais qu'il existait une méthode simple du genre "copy table" soit en DAO soit en SQL (comme p. ex. en Postgresql), ce qui éviterait le traitement ligne à ligne avec un recordset.

Mais ta suggestion m'a donné une idée qui donne une bonne performance :
1. dans la base B2, créer un lien LT1 vers la table T1 de la base B1
2. avec une requête SQL, créer la table T2 dans B2 mais sans la remplir
3. toujours en SQL, ajouter la clé primaire et les index (ça va beaucoup plus vite quand la table est vide)
4. en SQL, remplir la table T2 à partir de LT1

JL
voxov est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 20h54   #4
Expert Confirmé Sénior
 
Développeur informatique
Inscription : novembre 2006
Messages : 4 215
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : novembre 2006
Messages : 4 215
Points : 5 291
Points : 5 291
Citation:
Envoyé par voxov Voir le message
J'espérais qu'il existait une méthode simple du genre "copy table" soit en DAO soit en SQL (comme p. ex. en Postgresql), ce qui éviterait le traitement ligne à ligne avec un recordset.

JL

je n'arrive pas à comprendre ta démarche.
Sous Access il est possible soit de lier des tables à des bases comme PostGresSQL soit d'importer les tables.
__________________
Alea Jacta Est
Mat.M est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 09h19   #5
Membre actif
 
Homme Quentin D.
Étudiant
Inscription : avril 2011
Messages : 175
Détails du profil
Informations personnelles :
Nom : Homme Quentin D.
Âge : 25
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : avril 2011
Messages : 175
Points : 165
Points : 165
Personnellemt j'utilise cette technique pour créer une table dans la mm base :

Code :
1
2
        CurrentDb.Execute "SELECT * INTO [" & TableName & "] FROM TableSource"
        CurrentDb.Execute "CREATE INDEX NewIndex ON " & TableName & "(Champ1, Champ2) WITH PRIMARY"
La 1ère ligne copie la tablesource dans une nouvelle table et la seconde ajoute les clés primaires champ1 et champ2, tu peux en mettre autant que tu veux.

Après j'utiliserais ceci :

Code :
1
2
        DoCmd.TransferDatabase acExport, "Microsoft Access", waysource.accdb, acTable, TableName, TableName
        DoCmd.DeleteObject acTable, TableName
Qui te permet de copier ta table dans une autre DB et ensuite de supprimer cette table de ta DB d'origine.

J'espère t'avoir aidé ^^.

Cordialement,

Q.D.
Nitromard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2011, 15h59   #6
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 37
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 37
Points : 11
Points : 11
Merci pour vos réactions.

A Mat.M :
La démarche, c'est de copier une table d'une base mdb dans une autre base mdb dans une procédure vba. Je sais qu'on peut importer une table d'une base dans une autre en Access avec les menus mais moi je dois le faire dans un programme vba.

A Nitromard :
Bravo. C'est exactement ce que je cherchais. Je n'avais pas pensé trouver la solution dans les DoCmd. Merci.

JL
voxov est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2011, 08h50   #7
Membre actif
 
Homme Quentin D.
Étudiant
Inscription : avril 2011
Messages : 175
Détails du profil
Informations personnelles :
Nom : Homme Quentin D.
Âge : 25
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : avril 2011
Messages : 175
Points : 165
Points : 165
N'oublie pas de mettre la discussion en résolue, le bouton se trouve en bas de la discussion quand tu es connecté.
__________________
Pourquoi faire aujourd'hui ce que l'on peut remettre à demain ?
Nitromard est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h59.


 
 
 
 
Partenaires

Hébergement Web