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 :

Vérification de fichieres xml selon schéma xsd


Sujet :

VBA Access

  1. #1
    Membre expérimenté Avatar de RobiPMS
    Homme Profil pro
    Conseiller psycho-pédagogique
    Inscrit en
    Octobre 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseiller psycho-pédagogique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2007
    Messages : 827
    Points : 1 506
    Points
    1 506
    Par défaut Vérification de fichieres xml selon schéma xsd
    Bonjour à tous.
    J'utilise, pour vérifier la validité de fichiers xml qui doivent respecter une structure définie par un schéma xsd, la fonction suivante :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Function Valid()
    On Error GoTo Line1
    
    Dim NomRepertBD                 'Le nom du répertoire où se trouve la base de données
    Dim xmlDoc As New MSXML2.DOMDocument40
    Dim xsdCache As New MSXML2.XMLSchemaCache40
    Dim myErr
    Dim NomFichierXML
    Dim Lib As String
    Lib = Me.Classe1 & "_" & Me.AnSc & "_" & Me.DateFichier & "_" & Me.Code_centre & Me.Code_antenne
    NomRepertBD = ParentDir(Application.CurrentDb.Name)
    NomFichierXML = NomRepertBD + "Etnic\STAT" & Lib & ".xml"
    
    xsdCache.Add "", NomRepertBD + "IRIS_14.xsd"
    Set xmlDoc.schemas = xsdCache
    xmlDoc.validateOnParse = True
    xmlDoc.async = False
    xmlDoc.Load NomFichierXML
    
    Dim db As DAO.Database
    Set db = CurrentDb()
    Set myErr = xmlDoc.parseError
    If (myErr <> 0) Then
        MsgBox ("Le fichier xml comporte au moins une erreur et ne peut être envoyé : " _
        & myErr.reason & "Si vous n'arrivez pas à corriger l'erreur, contactez l'informaticien de l'AFAPMS.")
            DoCmd.SetWarnings False
            db.Execute "DELETE Transmission.* FROM Transmission"
            DoCmd.SetWarnings True
            db.Close
            Exit Function
    Else
        MsgBox ("Le fichier xml enregistré dans le dossier \Etnic sous le nom" & NomFichierXML & " est conforme " _
        & "au schéma défini. Il peut être envoyé.")
            DoCmd.SetWarnings False
            db.Execute "DELETE Transmission.* FROM Transmission"
            DoCmd.SetWarnings True
            db.Close
            Exit Function
    End If
    
    Line1:
    MsgBox "Votre installation ne permet pas la vérification du fichier xml qui a été créé. ", vbExclamation
    Exit Function
    End Function
    Ce code fonctionne parfaitement dans la plupart des installations. Chez certains utilisateurs, il génère une erreur de compilation "Type défini par l'utilisateur non défini" sur les déclarations faisant référence au document xml et au schéma xsd (lignes 5 et 6). Je soupçonne un problème de référence.
    Personnellement, j'utilise Access 2010 et la référence relative à ces déclarations est Microsoft XML, v4.0.
    J'ai pu remarquer que l'erreur se produit systématiquement sur les installations Access2016, et assez rarement sur des installations Access2010. Personnellement je ne dispose pas d'Access 2016 et je ne peux donc pas essayer sur cette version de résoudre le problème.
    Si quelqu'un a une suggestion, elle sera la bienvenue.

    Merci d'avance.

    Robert Lincé

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 350
    Points
    34 350
    Par défaut
    Salut,

    regarde sur les postes qui posent probleme dans la listes des references, tu en auras qui se seront flaggees comme MANQUANTE. Regarde si le fichier est disponible sur le poste.

    2 solutions ensuite :
    - Passer par des Object/CreateObject si librairie deja disponible sur le poste
    - ajouter les librairies manquantes si non dispo

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Supprimes les références dans le projet VB
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim xmlDoc As as object'New MSXML2.DOMDocument40
    Dim xsdCache As as object 'New MSXML2.XMLSchemaCache40
    Set xmlDoc = Createobject("MSXML2.DOMDocument40")
    Set xsdCache = Createobject("MSXML2.XMLSchemaCache40")
    Tes machine n'ont pas la même version de Windows et/ou Access!
    Dernière modification par Invité ; 12/09/2016 à 18h23.

  4. #4
    Membre expérimenté Avatar de RobiPMS
    Homme Profil pro
    Conseiller psycho-pédagogique
    Inscrit en
    Octobre 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseiller psycho-pédagogique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2007
    Messages : 827
    Points : 1 506
    Points
    1 506
    Par défaut
    Merci pour les réponses rapides, qui correspondent à ce que je pensais.
    Cependant, j'ai eu l'occasion de vérifier sur un poste où l'erreur se produit et qui est en Access 2010 : la référence était Microsoft XML, v6.0, et il n'y avait pas de référence flaggée manquante. Donc je pensais à un problème de version d'access et Windows, effectivement. J'ai essayé la solution proposée par Rdurupt, et j'ai alors une erreur "429" un composant ActiveX ne peut pas créer d'objet.
    La prochaine fois que l'on me signalera une erreur, je vérifierai si ce n'est pas une référence à la bibliothèque ActiveX qui manque!
    En attendant, s'il y a d'autres suggestions, elles sont les bienvenues!

    R.L.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Il faut regarder du côté de directives de compilation et choisir la bonne version du creatobject!

    La je suis sur mon téléphone portable mais regardes ça:https://msdn.microsoft.com/fr-fr/lib...or=-2147217396

    Si non tu y vas au culot!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    on error resume Next
    Createobject(A)
    If err then createobject(B)
    On error Goto 0
    bien évidemment A et B correspondant aux version de chaque machine!
    Dernière modification par Invité ; 12/09/2016 à 20h32.

  6. #6
    Membre expérimenté Avatar de RobiPMS
    Homme Profil pro
    Conseiller psycho-pédagogique
    Inscrit en
    Octobre 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseiller psycho-pédagogique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2007
    Messages : 827
    Points : 1 506
    Points
    1 506
    Par défaut
    J'ai toujours cette foutue erreur "429" un composant ActiveX ne peut pas créer d'objet quand j'essaie avec CreateObject. En attendant une éventuelle autre suggestion, j'ai masqué le problème en gérant l'erreur et en passant outre à la vérification du xml. Heureusement, mon programme de construction des xml fonctionne très bien et les problèmes de non conformité au schéma xsd sont rarissimes. Donc sur les PC où la validation ne marche pas, on s'en passera...
    Merci pour les suggestions.
    R.L.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    De toutes les façons le retour d'expérience sur 2016, je l'ai pas. Il y a une latence dans les entreprises pour les passage de version!

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/12/2008, 14h38
  2. [XSD] [Xerces-J 1.4.4] Validation XML avec schéma XSD
    Par g_rare dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 08/04/2008, 17h40
  3. Erreur de validation XML selon un XSD
    Par Franckintosh dans le forum C#
    Réponses: 1
    Dernier message: 18/10/2007, 16h22
  4. [XML][XSD] Lier un fichier XML à un schéma
    Par fisico dans le forum Valider
    Réponses: 1
    Dernier message: 01/09/2006, 12h25
  5. Réponses: 4
    Dernier message: 31/07/2006, 10h31

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