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

VBA Access Discussion :

Export XML avec XSD imposé


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2014
    Messages : 52
    Points : 7
    Points
    7
    Par défaut Export XML avec XSD imposé
    Bonjour à tous,

    Je travaille avec Access 2007 ma base est composée de plusieurs tables liées.

    Pour la publication d’annonces immobilières, je dois exporter cette base au format XML ;

    J’ai 2 problèmes :

    1) Comment exporter sans que les liens entre les tables n’apparaissent dans le XML (il faut en tenir compte, mais les faire figurer,sauf pour la table principale (le nom pour ce champs est [référence_client] dans le table principale et [lien] dans les autres. J'ai essayé avec l'option "Ne pas exporter les liens....", mais ils s'y trouvent quand même.

    2) Je dois valider le XML obtenu avec un XSD qui m’est imposé. J’ai trouvé sur internet un lien :

    http://www.alexandre-borrot.fr/xml_schema.php

    me permettant de le faire, là pas de problème, mais lors de l’export depuis Access à la racine du XML se trouve :
    <dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2014-11-16T08:58:09

    Ce qui donne lors de la validation :
    Le document n'a pas pu être parsé pour la où les raisons suivantes :
    Element 'dataroot': No matching global declaration available for the validation root.

    Je ne sais pas si j’ai été clair, quelqu’un peut-il venir à mon secours ?

    D’avance merci

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Je pense qu'avec la fonctionnalité d'export XML d'Access, le schéma xsd sera toujours celui d'Office.
    Par conséquent, il faut créer le fichier xml en Visual Basic.
    Voir Créer un fichier XML et plus particulièrement la partie "V-A-3. Avec la librairie Microsoft XML".

    La bibliothèque MSXML2 te permet même de valider la conformité d'un xml à un schéma xsd.
    Exemple de fonction:
    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
    19
    20
    21
    22
    23
    Function fnValiderXml(sXml As String, sFichierXsd As String) As String
    Dim oXmlDoc As MSXML2.DOMDocument60
    Dim oXmlSchema As MSXML2.XMLSchemaCache60
     
    ' Schema(s)
    Set oXmlSchema = New MSXML2.XMLSchemaCache60
    oXmlSchema.Add "", sFichierXsd
     
    Set oXmlDoc = New MSXML2.DOMDocument60
    Set oXmlDoc.schemas = oXmlSchema
    oXmlDoc.async = False
     
    oXmlDoc.loadXML sXml
     
    fnValiderXml = ""
    If oXmlDoc.parseError.errorCode <> 0 Then
       fnValiderXml = oXmlDoc.parseError.reason
    End If
     
    Set oXmlDoc = Nothing
    Set oXmlSchema = Nothing
     
    End Function
    L'argument sXml est une chaîne de caractère contenant l'intégralité du xml à valider. Ce pourrait être le chemin complet vers un fichier xml, auquel cas il faudrait remplacer l'instruction oXmlDoc.loadXML sXml par oXmlDoc.load sXml.
    L'argument sFichierXsd est le chemin complet vers le fichier xsd.
    La fonction retourne une chaîne vide si le xml est conforme au schéma ou un message d'erreur s'il y a un problème.

    A+

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2014
    Messages : 52
    Points : 7
    Points
    7
    Par défaut
    Bonjour, merci de ta réponse,

    En fait, ce qui me pose problème ce n’est pas la création, car le XML (vierge) et le XSD me sont donnés.
    J’importe le XML dans Access 2007, crée des liens sur les tables indépendantes, et modifie le type variable de chaque champ pour respecter le XSD.
    Je ne suis pas un expert XML, ni VBA (doux euphémisme) et c’est plutôt au niveau de l’export que je souhaiterais « travailler ».
    J’ai cherché rapidement sur différents sites, mais mon niveau de compétence de me permet pas de voir rapidement ce qui serait pertinent pour moi.

    D’avance merci.

  4. #4
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    Est-ce que tu peux poster ton schéma xsd ?

    Je vais regarder si au lieu d'exporter avec du code VBA on ne pourrait plutôt épurer le xml créé par Access pour qu'il soit conforme à ton schéma xsd imposé.

    A+

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2014
    Messages : 52
    Points : 7
    Points
    7
    Par défaut
    Bonjour,
    Les choses depuis hier ont un peu changés.
    Je vais changer de prestataire concernant la diffusion de mes annonces.
    Cependant, il y a des fortes chances que le XML et le XSD resteront dans la même logique (peut être moins ou plus de variables, des noms différents...)
    En pièces jointes, il y a le XSD et le XML.
    Encore merci.
    Très bonne journée.Schema.xsd

    PS: Je n'ai pas pu envoyé le XML (Fichier invalide ???)

  6. #6
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    Le schéma est plus complexe que ce à quoi je m'attendais.
    La fonction d'exportation xml d'Access n'est pas assez sophistiquée pour arriver à quelque chose de conforme au schéma.
    Ceci en particulier du au fait que le schéma a plus de deux niveaux.

    Access sait faire deux niveaux:
    Table
    ....champ1
    ....champ2
    ....etc

    Le schéma demande au moins trois niveaux:
    Table
    ....champ1
    ....champ2
    .......sous-champ1 de champ2
    .......sous-champ2 de champ2
    ....etc

    J'arrive à obtenir un troisième niveau avec Access à la condition de créer plusieurs tables et des relations d'intégrité référentielles entre ces tables.
    Table
    ....champ1
    ....Table2
    ........champ1 de Table2
    ........champ2 de Table2
    ....etc
    Ça veut dire qu'il faut créer des tables en suivant le schéma xsd, prévoir du code VBA pour alimenter ces tables à partir de données de la base de données, faire l'export en xml, puis finalement manipuler en VBA le fichier xml produit pour le rendre 100% conforme au schéma.

    Vu que tu ne vas pas utiliser ce schéma, je ne vais pas pousser plus loin mes investigations.
    J'en conclu que ma deuxième idée n'est pas beaucoup plus simple que ma première idée qui consistait à créer le fichier xml entièrement en VBA.

    A+

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2014
    Messages : 52
    Points : 7
    Points
    7
    Par défaut
    Bonjour,
    C'est effectivement ce que j'avais fait, créer plusieurs tables avec des relations.
    Cela marchait, les problèmes étaient lors de l'export, avec la racine du xml exporté (cf. mon premier message) et les valeurs des liens qui étaient eux aussi exportés.
    (je viens à nouveau d'essayer de mettre en pièce jointe le fichier XML : Impossible car "fichier non valide", pourquoi ?)

    De toute façon, je ne vais pas utiliser ce schéma, (qui n'est pas très optimum, puisque seule la table Photo peut contenir plusieurs valeurs pour le même champ !) car je vais changer de diffuseur.
    Le problème risque cependant de se reposer avec un nouveau schéma qui risque d'être globalement identique.

    je te remercie de tes réponses, et reviendrai vers toi lorsque j'aurai le nouveau.

    Bonne journée.

  8. #8
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    Voici la liste et l'ordre des éléments attendus par le schéma.
    Un élément est une balise <nom_element /> ou <nom_element> </nom_element>
    L'élément racine attendu est biens. C'est pour cela que dataroot généré par Access n'est pas validé.

    Les astérisques (" * ") représentent le niveau de l'élément dans la hierarchie du modèle.
    " * " Enfant direct de l'élément racine biens. Disons enfant niveau 1.
    " * * " Enfant d'un enfant de l'élément racine. -> enfant niveau 2.
    " * * * " Enfant niveau 3
    etc...

    "min:1" signifie que la présence de l'élément est obligatoire.

    Minimum Elément Type
    biens (racine)
    min:1 * bien arrayOfBien
    * * agence_nom xsd:string
    * * agence_tel xsd:string
    * * agence_tel2 xsd:string
    * * agence_mail xsd:string
    * * agence_mobile xsd:string
    * * agence_fax xsd:string
    * * agence_adresse xsd:string
    * * agence_postal xsd:string
    * * agence_postal_insee xsd:string
    * * agence_ville xsd:string
    * * agence_pays xsd:string
    * * agence_rcs xsd:string
    min:1 * * code_passerelle xsd:string
    min:1 * * reference_logiciel xsd:string
    * * reference_client xsd:string
    * * numero_mandat xsd:string
    * * type_mandat liste_type_mandat
    * * agence_tel_a_afficher xsd:string
    * * agence_mail_a_afficher xsd:string
    * * negociateur_nom xsd:string
    * * negociateur_tel xsd:string
    * * negociateur_mail xsd:string
    * * photos arrayOfPhotos
    * * * photo xsd:string
    min:1 * * type_transaction listeTypeTransaction
    min:1 * * type_bien listeTypeBien
    * * publication_web xsd:boolean
    * * publication_luxe xsd:boolean
    * * publication_liste arrayOfPublicationListe
    * * * site listeSite
    min:1 * * titres arrayOfTitre
    * * * titre_web_fr xsd:string
    * * * titre_print_fr xsd:string
    * * * titre_web_nl xsd:string
    * * * titre_print_nl xsd:string
    * * * titre_web_en xsd:string
    * * * titre_print_en xsd:string
    * * * titre_web_de xsd:string
    * * * titre_print_de xsd:string
    * * * titre_web_it xsd:string
    * * * titre_print_it xsd:string
    * * * titre_web_pt xsd:string
    * * * titre_print_pt xsd:string
    * * * titre_web_sp xsd:string
    * * * titre_print_sp xsd:string
    * * * titre_web_ru xsd:string
    * * * titre_print_ru xsd:string
    min:1 * * descriptions arrayOfDescription
    * * * descriptif_web_fr xsd:string
    * * * descriptif_print_fr xsd:string
    * * * descriptif_web_nl xsd:string
    * * * descriptif_print_nl xsd:string
    * * * descriptif_web_en xsd:string
    * * * descriptif_print_en xsd:string
    * * * descriptif_web_de xsd:string
    * * * descriptif_print_de xsd:string
    * * * descriptif_web_it xsd:string
    * * * descriptif_print_it xsd:string
    * * * descriptif_web_pt xsd:string
    * * * descriptif_print_pt xsd:string
    * * * descriptif_web_sp xsd:string
    * * * descriptif_print_sp xsd:string
    * * * descriptif_web_ru xsd:string
    * * * descriptif_print_ru xsd:string
    * * adresse xsd:string
    min:1 * * code_postal_a_afficher xsd:string
    * * code_postal_reel xsd:string
    * * code_postal_insee xsd:string
    * * commune_reel xsd:string
    min:1 * * commune_a_afficher xsd:string
    * * secteur xsd:string
    min:1 * * pays xsd:string
    * * is_confidence_commune xsd:boolean
    * * gps_longitude xsd:decimal
    * * gps_latitude xsd:decimal
    * * proximite_liste xsd:string
    * * proximite_gare xsd:boolean
    * * proximite_metro xsd:boolean
    * * proximite_commerce xsd:boolean
    * * proximite_bus xsd:boolean
    * * proximite_tourisme xsd:boolean
    * * proximite_culture xsd:boolean
    * * proximite_ecole xsd:boolean
    * * proximite_espace_vert xsd:boolean
    * * prix xsd:decimal
    * * montant_frais_agence xsd:decimal
    * * montant_charge xsd:decimal
    * * montant_taxe xsd:decimal
    * * devise listeDevise
    * * is_confidence_prix xsd:boolean
    * * is_frais_agence_inclus xsd:boolean
    * * is_charge_comprise xsd:boolean
    * * dpe_bilan listeDpeBilan
    * * dpe_valeur xsd:decimal
    * * dpe_date xsd:date
    * * ges_bilan listeGesBilan
    * * ges_valeur xsd:decimal
    * * ges_date xsd:date
    * * is_dpe_eligible xsd:boolean
    * * is_ges_eligible xsd:boolean
    * * is_batiment_basse_conso xsd:boolean
    * * type_chauffage listeTypeChauffage
    * * nature_chauffage listeNatureChauffage
    * * type_cuisine listeTypeCuisine
    * * nb_pieces xsd:nonNegativeInteger
    * * nb_chambres xsd:nonNegativeInteger
    * * nb_etages xsd:nonNegativeInteger
    * * nb_gardiens xsd:nonNegativeInteger
    * * nb_salle_d_eau xsd:nonNegativeInteger
    * * nb_salle_de_bain xsd:nonNegativeInteger
    * * nb_garages xsd:nonNegativeInteger
    * * nb_parkings xsd:nonNegativeInteger
    * * nb_parkings_exterieurs xsd:nonNegativeInteger
    * * nb_parkings_interieurs xsd:nonNegativeInteger
    * * nb_tennis xsd:nonNegativeInteger
    * * nb_appartements xsd:nonNegativeInteger
    * * nb_personnes xsd:nonNegativeInteger
    * * nb_wc xsd:nonNegativeInteger
    * * surface_bien xsd:decimal
    * * surface_sejour xsd:decimal
    * * surface_terrain xsd:decimal
    * * surface_terrasse xsd:decimal
    * * is_duplex xsd:boolean
    * * is_investissement xsd:boolean
    * * is_meuble xsd:boolean
    * * is_recent xsd:boolean
    * * is_refait xsd:boolean
    * * is_travaux xsd:boolean
    * * is_acces_handicapes xsd:boolean
    * * is_animaux_acceptes xsd:boolean
    * * is_loi_carrez xsd:boolean
    * * is_terrain_constructible xsd:boolean
    * * has_ascenseur xsd:boolean
    * * has_balcon xsd:boolean
    * * has_terrasse xsd:boolean
    * * has_climatisation xsd:boolean
    * * has_piscine xsd:boolean
    * * has_cabletv xsd:boolean
    * * has_cave xsd:boolean
    * * has_cellier xsd:boolean
    * * has_garage xsd:boolean
    * * has_box xsd:boolean
    * * has_grenier xsd:boolean
    * * has_jardin xsd:boolean
    * * has_veranda xsd:boolean
    * * annee_construction xsd:gYear
    * * date_de_livraison xsd:date
    * * liste_annexes xsd:string
    * * etage xsd:nonNegativeInteger
    * * expositions xsd:string
    * * url_visite_virtuelle xsd:anyURI
    * * url_bien_internet xsd:anyURI

    Ci-dessous un xml validé 'conforme' au schéma xsd, avec en commentaire les modifs que j'ai faites à la main pour le rendre conforme.
    Les commentaire c'est ce qui est en gris entre les balises <!-- et -->.
    Code xml : 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- *** renommer élément racine 'dataroot' en 'biens' *** -->
    <!-- <dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2014-11-26T19:55:01"> -->
    <biens>
        <bien>
            <!-- *** masquer la clé de la table *** -->
            <!-- <idBien>1</idBien> -->
     
            <agence_nom>Agence_A</agence_nom>
            <agence_tel>Tel_A</agence_tel>
            <agence_mail>agence@a.fr</agence_mail>
            <code_passerelle>code123</code_passerelle>
            <reference_logiciel>reflog0001</reference_logiciel>
     
            <!-- *** renommer élément 'bien_photos' en 'photos' *** -->
            <!-- <bien_photos> -->
            <photos>
            <!-- *** masquer la clé de la table *** -->
            <!-- <idBien>1</idBien> -->
            <!-- *** masquer la clé de la table *** -->
            <!-- <idPhoto>1</idPhoto> -->
            <!-- *** renommer élément 'bien_photos' en 'photos' *** -->
            <!-- </bien_photos> -->
            </photos>
     
            <type_transaction>Vente</type_transaction>
            <type_bien>Maison</type_bien>
     
            <!-- *** renommer élément 'bien_titres' en 'titres' *** -->
            <!-- <bien_titres> -->
            <titres>
            <!-- *** masquer la clé de la table *** -->
            <!-- <idBien>1</idBien> -->
            <titre_web_fr>maison_ref0001</titre_web_fr>
            <titre_print_fr>maison_ref0001</titre_print_fr>
            <!-- *** renommer élément 'bien_titres' en 'titres' *** -->
            <!-- </bien_titres> -->
            </titres>
     
            <!-- *** renommer élément 'bien_descriptions' en 'descriptions' *** -->
            <!-- <bien_descriptions> -->
            <descriptions>
            <!-- *** masquer la clé de la table *** -->
            <!-- <idBien>1</idBien> -->
            <descriptif_web_fr>maison_ref0001 150m2</descriptif_web_fr>
            <descriptif_print_fr>maison_ref0001 150m2</descriptif_print_fr>
            <!-- *** renommer élément 'bien_descriptions' en 'descriptions' *** -->
            <!-- </bien_descriptions> -->
            </descriptions>
     
     
            <adresse>adresse0001</adresse>        
            <code_postal_a_afficher>00001</code_postal_a_afficher>
            <commune_a_afficher>commune0001</commune_a_afficher>
            <pays>fr</pays>
            <prix>320000</prix>
            <devise>EUR</devise>
        </bien>
     
        <bien>
            <!-- *** masquer la clé de la table *** -->
            <!-- <idBien>2</idBien> -->
            <agence_nom>Agence_B</agence_nom>
            <agence_tel>Tel_B</agence_tel>
            <agence_mail>agence@b.fr</agence_mail>
            <code_passerelle>code123</code_passerelle>
            <reference_logiciel>reflog0002</reference_logiciel>
            <type_transaction>Vente</type_transaction>
            <type_bien>Appartement</type_bien>
     
            <!-- *** renommer élément 'bien_titres' en 'titres' *** -->
            <!-- <bien_titres> -->
            <titres>
            <!-- *** masquer la clé de la table *** -->
            <!-- <idBien>2</idBien> -->
            <titre_web_fr>appart_ref0002</titre_web_fr>
            <titre_print_fr>appart_ref0002</titre_print_fr>
            <!-- *** renommer élément 'bien_titres' en 'titres' *** -->
            <!-- </bien_titres> -->
            </titres>
     
            <!-- *** renommer élément 'bien_descriptions' en 'descriptions' *** -->
            <!-- <bien_descriptions> -->
            <descriptions>
            <!-- *** masquer la clé de la table *** -->
            <!-- <idBien>2</idBien> -->
            <descriptif_web_fr>appart_ref0002 65m2</descriptif_web_fr>
            <descriptif_print_fr>appart_ref0002 65m2</descriptif_print_fr>
            <!-- *** renommer élément 'bien_descriptions' en 'descriptions' *** -->
            <!-- </bien_descriptions> -->
            </descriptions>
     
            <adresse>adresse0002</adresse>
            <code_postal_a_afficher>00002</code_postal_a_afficher>
            <commune_a_afficher>commune0002</commune_a_afficher>
            <pays>fr</pays>
            <prix>270000</prix>
            <devise>EUR</devise>
        </bien>
    <!-- *** renommer élément racine 'dataroot' en 'biens' *** -->
    <!-- </dataroot> -->
    </biens>
    J'ai aussi du modifier l'ordre de certains éléments s'ils n'étaient pas dans le bon ordre dans ma table principale, et ceux provenant des tables en relation avec la table principale, qu'Access a placé en dernier.

    Ça fait beaucoup de manipulations.
    A mon niveau je ne serais capable que d'écrire un code VBA créant un fichier xml pour un seul schéma. C'est à dire que la logique de mon code reposerait entièrement sur la structure du schéma xsd.
    Ecrire un code VBA s'adaptant au schéma xsd dépasse mes compétences.

    Je ne sais s'il existe des outils permettant de créer des fichiers xml en respectant un schéma ?
    J'aurai tendance à penser que oui si on considère que seules les personnes maîtrisant VBA (ou autre langage) peuvent le faire...

    A+

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2014
    Messages : 52
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Merci beaucoup pour tout ce travail.
    Je reviendrai vers toi quand j'aurai le nouveau schéma.
    Très bonne journée.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2014
    Messages : 52
    Points : 7
    Points
    7
    Par défaut
    Bonjour, et joyeux Noël,

    J'ai changé de diffuseur pour mes annonces.

    Le format d'export est toujours un fichier XML, mais plus simple.
    Après l'export depuis Access 2007, j'obtiens le fichier annonce.xml (pièce jointe).

    En pièce jointe se trouve également le fichier que souhaite le diffuseur (annonce format demandé.xml)

    Publication est une variable binaire qui indique si l'annonce du bien doit être exportée ou pas.
    Lien (balise photos) est la variable de liaison dans access entre la table annonce et la table photo, sa présence dans le fichier xml ne serait pas gênante.

    Oups!!! Je n'arrive pas à mettre en pièces jointes les fichiers XML (fichier invalide) ????
    Au Secours

  11. #11
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour, et joyeux Noël à toi également.

    Citation Envoyé par GEGE1963 Voir le message
    Bonjour, et joyeux Noël,
    ...
    Oups!!! Je n'arrive pas à mettre en pièces jointes les fichiers XML (fichier invalide) ????
    Au Secours
    Mets le fichier xml dans un fichier archive (.zip ou .rar ou .7z ...) et incorpore également le fichier schéma (.xsd).
    Ensuite, joins le fichier archive au lieu du fichier xml.

    A+

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2014
    Messages : 52
    Points : 7
    Points
    7
    Par défaut
    Ok, je vais essayer.
    Pour info, il n'y a plus de XSD imposé.
    La chose qui ne va pas, c'est que l'export access crée pour chaque annonce plusieurs 'balises' photo.

    D'avance merci.
    Fichiers attachés Fichiers attachés

  13. #13
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Je te joins une base dans laquelle j'ai créé un formulaire fmXMLexporter.
    Ce formulaire contient le code VBA pour créer le fichier xml.
    Il s'appuie sur deux tables:
    • annonce
    • photos

    La liaison entre les deux tables se fait par le champ «reference».

    Le code VBA du formulaire se paramètre à l'aide de constantes déclarées au début du module de code du formulaire fmXMLexporter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Const CS_TBL_ANNONCES = "annonce"       ' Table des annonces
    Const CS_TBL_PHOTOS = "photos"          ' Table des photos
    Const CS_CHP_CLE = "reference"          ' Champ clé de la table des annonces et clé étrangère de la table des photos
     
    Const CS_CODECLIENT = "A définir"       ' Code client qui sera reporté dans l'élément racine du xml
    Cela te laisse la liberté de renommer les tables.
    Par contre, le champ clé doit rester «reference» car les noms des champs des tables doivent coïncider avec les noms des éléments xml (les balises).
    Il te faudra certainement modifier la constante CS_CHP_CLE pour qu'elle corresponde à ton code client.
    Par exemple si ton code est 123456 il faudra remplacer...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Const CS_CODECLIENT = "A définir"       ' Code client qui sera reporté dans l'élément racine du xml
    ...par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Const CS_CODECLIENT = "123456"       ' Code client qui sera reporté dans l'élément racine du xml
    Pour intégrer cela à ta base de données, il faut importer le formulaire fmXMLexporter et les deux tables.
    Ensuite, dans l'éditeur Visual Basic, il faut ajouter une référence Visual Basic à «Microsoft XML, v6.0»

    A+
    Fichiers attachés Fichiers attachés

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2014
    Messages : 52
    Points : 7
    Points
    7
    Par défaut
    Bonsoir,

    Merci beaucoup, c'est parfait.

    Je te souhaite une super soirée.

    j'aurai peut être une autre question à te poser concernant un autre point.. sur un autre sujet.

    Gérard

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2014
    Messages : 52
    Points : 7
    Points
    7
    Par défaut
    Une petite précision:

    La variable "publication" est une de MES variables, que j'utiliserai pour que l'annonce soit diffusée ou pas,(cela peut arriver de supprimer temporairement une annonce), c'est à dire qu'il faudrait que si publication=0, l'annonce ne soit pas exportée, et que l'élément publication ne figure pas dans le fichier XML.

    Je sais, tu dois commencer à me trouver...pénible.

    Encore une fois je te remercie de ton superbe travail.

  16. #16
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Ok, j'ai créé la requête R_annonce_xml qui filtre la table «annonce» sur le critère Publication="1" et modifié la constante CS_TBL_ANNONCES de manière à prendre cette requête comme source de données en lieu et place de la table.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Const CS_TBL_ANNONCES = "R_annonce_xml" ' Table ou requête des annonces
    De plus, la requête R_annonce_xml ne sélectionne pas le champ Publication. De ce fait le champ Publication ne sera pas exporté dans le fichier xml.

    A+
    Fichiers attachés Fichiers attachés

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2014
    Messages : 52
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Merci beaucoup, tout est parfait.

    Bon WE

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2014
    Messages : 52
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Merci encore pour tout ce que tu as fait.

    Dans un souci de clarté, j’aimerais pouvoir visualiser les photos figurant dans les annonces. Une seule à la fois, dans un cadre indépendant du sous-formulaire photos, en cliquant sur un des champ photos. Dans ce champs seul le nom de la photo figure, mais le dossier dans lequel figurent les photos sera toujours le même : Exemple : C:/Grésimmo/Photos diffusion.
    J’ai pas mal cherché sur internet, mais n’ai rien trouvé qui marche (toujours qq erreurs dans le code)

    Autre petite chose, pour l’instant je renseigne les champs photos manuellement, ce qui est assez fastidieux, y a-t-il une possibilité au travers d’un bouton « Ajouter » de pouvoir choisir les photos avec une boite de dialogue sans que le chemin ne soit présent dans le champ photo car pour le diffuseur cela serait incompréhensible.
    La première photo est la plus importante, c’est la photo vitrine (qui peut, qui doit régulièrement être changée, comment faire pour que chaque enregistrement photos ait un champ binaire (Oui/Non), qui indiquerait que lors de l’exportation cette photo soit la première de la balise photo (bien sur il ne peut y en avoir qu’une seule) et que par défaut ce soit elle visualisée dans la cadre ?

    Si tu trouves que mes demandes sont trop nombreuses, n’hésites pas à me le faire savoir.

    A+ , adepte de Robert Plant

  19. #19
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    A+ , adepte de Robert Plant
    Et de Jimmy Page ;-)

    Bon, j'ai repris ma base exemple et je l'ai remaniée pour répondre à tes questions.
    1ère chose à faire:
    Ouvrir la table TParamsAnnonce et renseigner le champ prmValueStr en face de CHEMIN_PHOTOS en mettant le chemin vers les photos.
    Par exemple: C:\Users\NomUtilisateur\Pictures\Annonces

    J'ai ajouté deux modules de codes.
    Module modGlobal
    Contient des fonctions utilitaires

    Module modAnnonces
    Contient les constantes et le code qui était dans le formulaire fmXMLexporter.
    Intérêt: rendre disponibles et réutilisables les constante et le code d'exportation xml.
    => Le code exportation peut être lancé depuis n'importe quel formulaire.

    J'ai ensuite ajouté deux formulaires (un formulaire principal fmAnnonces lié à la table annonce, et un formulaire fmPhotosListe lié à la table photo).
    Le formulaire fmPhotosListe est voué à être intégré en tant que sous-formulaire.

    Les réponses à tes questions se trouvent sous forme de code dans le formulaire fmPhotosListe.
    Ce dernier affiche la liste des noms de fichiers photos, ainsi que la photo de l'enregistrement actif dans un contrôle image situé dans le pied de formulaire.
    J'ai ajouté un champ bVitrine (oui/non) dans la table photo qui se matérialise par une case à cocher dans le formulaire.
    Par code je sais gérer le fait qu'une seule photo peut être la photo vitrine.
    Cela se passe dans la procédure Sub bVitrine_MouseDown.

    L'ajout de une ou plusieurs photo est géré dans la procédure Sub cmdAjouterPhotos_Click().

    L'affichage d'une photo se fait en changeant l'enregistrement actif dans le sous-formulaire (fmPhotosListe).

    J'espère qu'il n'y pas de bugs dans mon code. J'ai fait des tests mais il y a peut-être des cas de figure que je n'ai pas pris en compte.

    A+
    Fichiers attachés Fichiers attachés

  20. #20
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2014
    Messages : 52
    Points : 7
    Points
    7
    Par défaut
    Bonsoir, fan de John Paul Jones,

    Ce que tu as fait est parfait, superbe.....

    Merci, merci

Discussions similaires

  1. [XSD] Valider partiellement XML avec XSD
    Par =FdK= dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 10/12/2008, 13h51
  2. [JAXB] Problème parsing XML avec XSD validant
    Par vano dans le forum Persistance des données
    Réponses: 2
    Dernier message: 26/08/2008, 09h59
  3. [WD 12] MSXML - validation xml avec xsd externe
    Par nicol9 dans le forum WinDev
    Réponses: 1
    Dernier message: 29/07/2008, 15h08
  4. [SAX] validation d'un xml avec xsd
    Par salmamah dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 25/04/2008, 17h22
  5. Valider XML avec XSD
    Par neilbgr dans le forum Langage
    Réponses: 10
    Dernier message: 26/03/2008, 16h01

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