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

Bases de données Delphi Discussion :

[SQL Server 2016] Génération fichier XML depuis Dataset


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Par défaut [SQL Server 2016] Génération fichier XML depuis Dataset
    Bonjour à tous,
    Je dois transformer une requête SQL en XML suivant le modèle ci-après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <Entete Agence="0010001" Identite="0000010" DateRelation="10062010">
      <Particulier>
        <Information Nom="DOE" Prenom="John" Genre="M" DatNaissance="11061985" />
        <PieceIdentite TypPiece="01" NumPiece="XXXXXXXXX" DatPiece="17032020" />
        <Adresse Description="15 Rue XXXX" Commune="C1012" CodPostal="888" />
        <Compte Status="00" Numero="XXXXXXXXXXX" CleRib="00" Type="01"></Compte>
        <Compte Status="00" Numero="YYYYYYYYYYY" CleRib="34" Type="02"></Compte>
      </Particulier>
    </Entete>
    Pour ce faire, j'ai tenté avec SQL Server de reproduire ce format de sortie avec la requête 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
     
    SELECT
         BRC.Code AS "@Agence"
        ,CUS.Code AS "@Identite"
        ,FORMAT(CUS.ContactDate, 'ddMMyyyy') AS "@DateRelation"
        ,CUS.LastName AS [Particulier/Information/@Nom]
        ,COALESCE (CUS.FirstName, 'N/A') AS [Particulier/Information/@Prenom]
        ,CUS.Gender AS [Particulier/Information/@Genre]
        ,FORMAT(CUS.BirthDate, 'ddMMyyyy') AS [Particulier/Information/@DateNaissance]
        ,CASE
           WHEN CUS.DocType = 1 THEN '01' 
           WHEN CUS.DocType = 2 THEN '03' 
         END AS [Particulier/PieceIdentite/@Type]
        ,CUS.DocNumber AS [Particulier/PieceIdentite/@Numero]
        ,FORMAT(CUS.DocDate, 'ddMMyyyy') AS [Particulier/PieceIdentite/@Date]
        ,CUS.Address AS [Particulier/Adresse/@Description]
        ,TOW.Code AS [Particulier/Adresse/@Commune]
        ,TOW.PostalCode AS [Particulier/Adresse/@CodePostal]
        ,ACC.Status AS [Particulier/Compte/@Status]
        ,ACC.Number AS [Particulier/Compte/@Numero]
        ,ACC.Rib AS [Particulier/Compte/@CleRib]
        ,ACC.Type AS [Particulier/Compte/@Type]
    FROM MyCBS.dbo.Customer CUS 
    INNER JOIN MyCBS.dbo.Branch BRC ON BRC.BranchID = CUS.BranchID
    INNER JOIN MyCBS.dbo.Account ACC ON ACC.CustomerID = CUS.CustomerID
    INNER JOIN MyCBS.dbo.Town TOW ON TOW.PlaceID  = CUS.DocPlaceID 
    WHERE CUS.CustomerID = 545875 --- Customer has 2 accounts
    ORDER BY CUS.Code
    FOR XML PATH ('Entete');
    Sauf que il me sort 2 lignes XML au lieu d'une avec les 2 lignes de comptes
    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
     
    <Entete Agence="0010001" Identite="0000010" DateRelation="10062010">
      <Particulier>
        <Information Nom="DOE" Prenom="John" Genre="M" DatNaissance="11061985" />
        <PieceIdentite TypPiece="01" NumPiece="XXXXXXXXX" DatPiece="17032020" />
        <Adresse Description="15 Rue XXXX" Commune="C1012" CodPostal="888" />
        <Compte Status="00" Numero="XXXXXXXXXXX" CleRib="00" Type="01"></Compte>
      </Particulier>
    </Entete>
    <Entete Agence="0010001" Identite="0000010" DateRelation="10062010">
      <Particulier>
        <Information Nom="DOE" Prenom="John" Genre="M" DatNaissance="11061985" />
        <PieceIdentite TypPiece="01" NumPiece="XXXXXXXXX" DatPiece="17032020" />
        <Adresse Description="15 Rue XXXX" Commune="C1012" CodPostal="888" />
        <Compte Status="00" Numero="YYYYYYYYYYY" CleRib="34" Type="02"></Compte>
      </Particulier>
    </Entete>
    J'ai tenté beaucoup de bidouille etc mais j'arrive pas.
    Donc je pense me faire un outil avec Delphi qui va me permettre de faire le truc ligne par ligne.
    Avant de le faire, avez vous des recommandations à me donner.
    Merci

    Andry

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 739
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    C'est plus un problème de SQL qu'autre chose,
    J'ai tenté beaucoup de bidouille
    STRING_AGG devrait pouvoir répondre au problème d'un client avec plusieurs comptes. ([EDIT] je n'ai fait attention à la version 2016 qu'après coup or STRING_ACC n'est dispo qu'avec la version 2017)
    Perso, j'utiliserai même une CTE pour dégager les différents comptes

    Cela étant, je ne connais pas suffisamment SQLServer pour faire des propositions. À mon avis, il vaudrait mieux poser la question dans le forum https://www.developpez.net/forums/f9...developpement/

  3. #3
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    C'est plus un problème de SQL qu'autre chose,

    STRING_AGG devrait pouvoir répondre au problème d'un client avec plusieurs comptes. ([EDIT] je n'ai fait attention à la version 2016 qu'après coup or STRING_ACC n'est dispo qu'avec la version 2017)
    Perso, j'utiliserai même une CTE pour dégager les différents comptes
    Bonjour SergioMaster,
    Oui, c'est la version 2016.
    J'ai testé avec les bout de code fourni sur les différentes site de MS traitant le sujet. Il y avait 2 possibilité soit avec 2 requêtes imbriqué soit celui ci.
    Bref, les résultats ne sont pas satisfaisant. D’où l'idée de faire un parsing à la main avec Delphi.
    Citation Envoyé par SergioMaster Voir le message
    Cela étant, je ne connais pas suffisamment SQLServer pour faire des propositions. À mon avis, il vaudrait mieux poser la question dans le forum https://www.developpez.net/forums/f9...developpement/
    Merci pour l'idée, je vais reposter dans ce forum.
    Andry

  4. #4
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Par défaut
    Après codage d'un outils sous Delphi, j'ai fini par avoir le résultat escompté :
    Utilisation de 2 Query Client et Compte et utilisations des attributs des Noeuds créer.
    Reste plus qu'a tester avec beaucoup de donnée pour voir la vitesse.
    Merci

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

Discussions similaires

  1. [2016] Génération d'un fichier XML depuis une requête
    Par Andry dans le forum Développement
    Réponses: 9
    Dernier message: 02/12/2022, 16h31
  2. [2012] Fichier XML depuis une requête SQL
    Par Lio_LGM dans le forum Développement
    Réponses: 11
    Dernier message: 09/11/2021, 15h55
  3. [Débutant] Charger une table SQL Server avec un fichier XML
    Par lucasgensac dans le forum C#
    Réponses: 13
    Dernier message: 19/09/2017, 18h31
  4. representer 1 etat 2 sortie d'1 bd sql server ds 1 fichier
    Par allaoua dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 27/12/2005, 16h08
  5. sql server: execution d'un programme depuis un trigger
    Par constantin dans le forum Développement
    Réponses: 3
    Dernier message: 04/10/2005, 20h20

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