Importer une table et supprimer une table en VBA [Résolu]

Signaler
Messages postés
25
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
6 janvier 2006
-
Messages postés
25
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
6 janvier 2006
-
Bonjour,
j'aimerai savoir comment faire pour importer une table d'une base de données access vers une autre base de données access. Aussi, il faut savoir que la table que je veux importer existe déjà dans ma base de données je veux donc la supprimer avant de la réimporter. Il s'agit en fait de faire une sorte de mise à jour. Au début je voulais copier ligne par ligne mais le problème est que je ne connais pas le nombre de colonne de ma table (car je veux le faire pour plusieurs tables) je ne peux donc pas faire un truc du genre :
Tbl.fields(Nb) = qqch 'sachant que je ne connai pas le "Nb" maxi pour chacune des tables.

De plus ça serai vrament trop long.

Je veu donc simplement connaitre la syntaxe pour i:mporter une table d'une application à une autre et comment supprimer une table. Merci d'avance à ceux qui me répondrons.

5 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
103
Le code que je t'ai donné
est un code générique, il faut l'utiliser avec les noms que tu utilise
dans ton projet, vu que chacun à sa propre nomenclature, on ne peux pas
faire du code qui réponde exactement au question !



Dans ton cas, voici ce que ca donne :



'connexion a la base
Dim MaDb as new ADODB.Connection

Set Madb = CurrentProject.Connection



'déclaration et initialisation de la table à importer
DimTblAImporter as new ADODB.recordset

TblAImporter.open "Select * from PIECE in <CheminBaseExterne>, madb, adopendynamic, adlockoptimistic



'declaration et initialisation de la table dans laquelle je veu inserer les données

Dim TblCourante as new ADODB.recordset



'effacement des données de la table courante

While not TblCourante.EOF

TblCourante.delete

TblCourante.update

WEnd



dim oField As ADODB.Field



'Insertion des données dans la table courante

While not TblAImporter.EOF

Call TblCourante .AddNew

For Each oField In TblAImporter.Fields




Let TblCourante.Fields(oField.Name).Value =
TblAImporter.Fields(oField.Name).Value




Next oField

Call TblCourante.Update

Call TblAImporter.MoveNext

WEnd


DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 107 internautes nous ont dit merci ce mois-ci

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
103
Pour copier d'une table à l'autre (si les chaps sont identiques), il suffit de parcourir la collection des colonnes :



While Not oRecordsetSource.EOF



Call oRecordsetCopy.AddNew

For Each oField In oRecordsetSource.Fields




Let oRecordsetCopy.Fields(oField.Name).Value =
oRecordsetSource.Fields(oField.Name).Value




Next oField

Call oRecordsetCopy.Update

Call oRecordsetSource.MoveNext



Wend



Pour importer une table, le plus simple reste de recréer la table avec
tout ces champs dans la nouvelle base (utilisation d'ADOX pour la
création).

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.Com/popapi/
Messages postés
25
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
6 janvier 2006

Merci, mais je ne comprend pas très bien le oRecordsetSource il correspond à quoi?
Idem pour le oFields. En fait, je ne sais pas comment m'en servir dans mon cas :

voici ce que je fais :

'connexion a la base
Dim MaDb as new ADODB.Connection
Set Madb = CurrentProject.Connection

'déclaration et initialisation de la table à importer
DimTblAImporter as new ADODB.recordset
TblAImporter.open "Select * from PIECE in <CheminBaseExterne>, madb, adopendynamic, adlockoptimistic

'declaration et initialisation de la table dans laquelle je veu inserer les données
Dim TblCourante as new ADODB.recordset

'effacement des données de la table courante
While not TblCourante.EOF
TblCourante.delete
TblCourante.update
WEnd

'Insertion des valeur
While Not TblAImporter.eof
TblCourante.fields(0) = TblAImporter.fields(0)
.........
'Le pb est ici je ne sais pas combien j'ai de colonne
WEnd

Merci encore de m'aider
Messages postés
25
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
6 janvier 2006

j'ai oublié la ligne :

TblCourante.Open "Select * from PIECE", madb, adopendynamic, adlockoptimistic


'a mettre après
Dim TblCourante as new adodb.recordset


Mais je pense que tu avais compris
Messages postés
25
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
6 janvier 2006

merci pour ton aide. A+