IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

[Automation]Importation fichiers XML (ok pour 1 fichier, pb au dela) [FAQ]


Sujet :

Contribuez

  1. #1
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 186
    Points
    186
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 077
    Points : 24 713
    Points
    24 713
    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,

  3. #3
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 186
    Points
    186
    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...

  4. #4
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 186
    Points
    186
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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....)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/12/2008, 14h38
  2. Réponses: 1
    Dernier message: 22/04/2008, 12h24
  3. Réponses: 3
    Dernier message: 06/08/2007, 04h44
  4. [DOM] (org.w3c.dom) copier un noeud d'un fichier XML dans un autre fichier XML
    Par snoop dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 13/02/2007, 18h22
  5. Importer le contenu un fichier xml dans un autre fichier xml
    Par gedeon555 dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 27/07/2005, 12h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo