Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Contribuez
Contribuez Access : Vos contributions. Postez ici vos codes sources, conseils, astuces et autres propositions. Ce forum n'est pas un forum technique mais destiné aux contributions pour www.developpez.com
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 19/04/2007, 11h50   #1
Membre habitué
 
Inscription : juin 2005
Messages : 275
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 275
Points : 141
Points : 141
Par défaut [Automation]Importation fichiers XML (ok pour 1 fichier, pb au dela)

J'ai besoin de créer une base access à partir de fichiers XML.

Pour cela, j'ai pu faire un code qui crée cette base, puis importe un fichier XML, puis referme tout proprement. Il est testé et fonctionne correctement :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim oAccess, oDb, fso
'creation de l'objet Microsoft Access
Set oAccess = CreateObject("Access.application")
'laisser Access invisible
oAccess.Visible = False
'création d'une nouvelle base de données Access
oAccess.newCurrentDatabase (repFic & nomBase)
'ouverture de la base de données fraichement créée
Set oDb = oAccess.CurrentDB()
'Lancement de la méthode d'importation du fichier XML
oAccess.importXML(nomDuFichierXMLAImporter)
'Fermeture de la base de données
oAccess.CloseCurrentDataBase
'Fermeture d'Access
oAccess.Quit
'Nettoyage des variables instanciées
Set oDb = Nothing
Set oAccess = Nothing
A partir de là, j'ai besoin d'y apporter une légère amélioration : importer PLUSIEURS fichiers xml dans le MEME base de données. Sachant que quelque soit le nombre de fichiers à importer, ils ont tous besoin des mêmes tables.

J'ai donc tenté de faire :
Code :
1
2
3
4
5
'listeFichiersAImporter est un tableau contenant tous les fichiers xml qui
'doivent être importés dans la base
For indice = 0 To UBound(listeFichiersAImporter)
     oAccess.importXML(listeFichiersAImporter(indice))
Next
Le problème est que chaque importation crée ses propres tables. Par exemple, si une table "Application" est nécessaire, le premier import va créer une table "Application" et la remplir correctement, le second crée une table "Application1" et la remplit à son tour avec les nouvelles données, le 3eme une table "Application2", le 4ème une table "Application3"....

Comment puis-je procéder pour que l'import se fasse dans la même table ?
abertaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2007, 15h48   #2
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 096
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 096
Points : 11 628
Points : 11 628
Bonjour,

Il n'y a apparement pas d'option pour écrire dans une table existante.

Mon conseil est :
Après l'insertion de la 2ème table qui va prendre le nom de Table1 exécuter une requete pour copier les données dans Table, puis effacer Table1.
Après il s'agit d'un éternel recommencement...

Désolé pour cette bricosolution.

Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2007, 16h02   #3
Membre habitué
 
Inscription : juin 2005
Messages : 275
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 275
Points : 141
Points : 141
Bien lorsque l'importation est faite "à la main" via l'interface de Microsoft Access 2002 "Fichier>Données externes>Importer", il est possible de cocher en options d'importation : "Ajouter des données aux tables existantes"

Donc je pense que cette option doit pouvoir s'activer dans un script VB. Mais j'ai un souci : je ne parviens pas à trouver d'informations sur la fonction importXML dans l'aide d'Access.

La seule chose que je suis donc arrivé à faire, c'est de fabriquer un seul fichier XML à partir de tous ceux qui m'interessent, mais c'est plutot lourd à mettre en place, et vive la maintenance qui s'en suivra lorsque l'application sera amenée à évoluer...
abertaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2007, 09h46   #4
Membre habitué
 
Inscription : juin 2005
Messages : 275
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 275
Points : 141
Points : 141
Au final j'ai pu résoudre mon problème. Comme d'hab, je mets à jour le post qui pourrait être utile à quelqu'un d'autre.

Code :
1
2
3
4
5
6
7
8
9
10
11
Sub LancerImportationXML(base, fichiersImport)
    'Définition des variables
    acStructureOnly = 0 'importer la structure de la base uniquement
    acAppendData = 2    'importer les données à la suite de celles qui seraient éventuellement déjà présente dans les tables
    'Importation de la structure des données
    Call base.ImportXML(fichiersImport(0), acStructureOnly)
    'Importation de chacun des fichiers
    For i = 0 To UBound(fichiersImport)
        Call base.ImportXML(fichiersImport(i), acAppendData)
    Next
End Sub
Le principe est de d'abord importer la structure des fichiers XML (XSD), puis d'importer les données de chacun des fichiers XML (qui, bien évidemment, respectent tous le même schéma XSD).

NOTE IMPORTANTE : certains schémas XSD impliquent une création automatique de champs xxxxxxKey dans Access. Je ne maitrise pas du tout les conditions qui font que ces champs sont créés mais, s'il en existe, l'importation foirera car des redondances seront créées au niveau de ces champs, qu'Access a défini comme clé (chaque importation fait démarrer la numérotation des ces champs à 0....)
abertaud 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 01h35.


 
 
 
 
Partenaires

Hébergement Web