Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et 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

Réponse
 
Outils de la discussion
Vieux 19/04/2007, 11h50   #1 (permalink)
Membre Confirmé
 
Date d'inscription: juin 2005
Messages: 266
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 :
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 :
'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 ?

Dernière modification par abertaud ; 19/04/2007 à 14h07
abertaud est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 19/04/2007, 15h48   #2 (permalink)
Rédacteur/Modérateur

 
Avatar de loufab
 
Date d'inscription: avril 2005
Localisation: TOULOUSE
Âge: 40
Messages: 3 771
Envoyer un message via MSN à loufab
Par défaut

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,
__________________
questions techniques par MP >>> poubelle ! -- "Jeux dés teste le lent gagé c'est messe ! Hein qu'on prêt en cible nom ?"
les Sources ACCESS Tutoriels et Applications gratuites | Mode Page ACCESS 2007 | Sécurité ACCESS | Appels formulaires | Optimisez vos applications Visitez AccesSite

"Access ne nous rend que ce qu'on lui donne..." loufab
Roulez autrement roulez en Trans Am.
loufab est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 19/04/2007, 16h02   #3 (permalink)
Membre Confirmé
 
Date d'inscription: juin 2005
Messages: 266
Par défaut

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
Vieux 20/04/2007, 09h46   #4 (permalink)
Membre Confirmé
 
Date d'inscription: juin 2005
Messages: 266
Par défaut

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 :
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
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Access > Contribuez

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide