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

VB.NET Discussion :

[Dataset] Problème d'imbrication de données


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti

    Inscrit en
    Février 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 38
    Par défaut [Dataset] Problème d'imbrication de données
    Bonjour à tous,

    Voilà je travaille actuellement sur un projet d'import/export de données en VB .Net2005 entre 2 bases Oracle.

    Le principe : extraire des données au format XML afin de les intégrer dans une autre base.

    Voici mon problème:

    J'ai un Schéma XSD où il existe une relation imbriquée entre 2 éléments t1,t2 représentant des tables SQL. La référence à t2 se fait en plein milieu de la déclaration de t1.

    exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <xs:element name="t1">
      <xs:element name = "t1c1"/> 
      <xs:element ref="t2" maxOccurs="unbounded"/> 
        <xs:element name = "t1c2"/>
    </xs:element> 
     
    <xs:element name="t2"> 
      <xs:element name = "t2c1"/> 
    </xs:element>
    Pour l'export j'ai mis en place un système lisant le squelette de chaque table dans le schéma XSD inclus dans un Dataset et générant à partir de ce dernier les requêtes d'extraction.

    Je parcours donc toutes les elements de types "Tables SQL" et je remplis un dataset qui sera ensuite écrit dans un fichier XML. C'est au niveau de l'ajout des données dans le dataset que ça coince...

    En effet dans le cas de données imbriquées, les données sont insérées en fin d'élément. Ainsi au lieu d'avoir :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <t1> 
      <t1c1>x</t1c1> 
      <t2> 
        <t2c1>z</t2c1> 
      </t2> 
      <t1c2>y</t1c2> 
    </t1>

    J'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <t1> 
      <t1c1>x</t1c1> 
      <t1c2>y</t1c2> 
      <t2> 
        <t2c1>z</t2c1> 
      </t2> 
    </t1>
    Ayant mis la propriété EnforceConstraints de mon Dataset à true, pourquoi ce dernier ajoute mon élément t2 en fin de mon élément t1 au lieu de l'insérer à l'endroit où on y fait référence?

    Sachant que je ne peux modifier le schémas XML, comment pourrai je résoudre mon problème?

    Merci d'avance pour votre aide.

  2. #2
    Membre averti

    Inscrit en
    Février 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 38
    Par défaut
    Petite découverte qui confirme mon problème...

    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
     
     Public Shared Function InitDataSet( ByRef _oDataset As DataSet, ByVal bEnforceConstraints As Boolean, ByRef _fullNameXsd As String) As Boolean
      Dim bRet As Boolean = False
     
      Try
     
      _oDataset = New DataSet()
      _oDataset.EnforceConstraints = bEnforceConstraints
      _oDataset.ReadXmlSchema(_fullNameXsd)
     
      bRet = True
     
      Catch ex As Exception
        bRet = False            
      End Try
     
       InitDataSet = bRet
    End Function
    Apparemment le schéma XSD donné en paramètre de la fonction ReadXmlSchema est modifié, adapté avant d'être intégré à l'objet DataSet.

    Les références aux éléments fils sont mis en fin d'élément racine au lieu de rester à la place definie dans le xsd...

    Ainsi :
    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
     
    (...)
    <xs:element name="facture">
      <xs:element name="id_f" type="xs:decimal">
      <xs:sequence minOccurs="0">
    	  <xs:element ref="detailFacture" maxOccurs="unbounded">		
      </xs:sequence>
      <xs:element name="lib" type="xs:string">
    </xs:element>
     
    <xs:element name="detailFacture">
      <xs:element name="id_df" type="xs:decimal">
      <xs:element name="montant" type="xs:decimal">
    </xs:element>
    (...)
    devient, une fois liés au Dataset:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    (...)
    <xs:element name="facture">
      <xs:element name="id_f" type="xs:decimal">
      <xs:element name="lib" type="xs:string">
      <xs:element name="detailFacture" maxOccurs="unbounded">
        <xs:element name="id_df" type="xs:decimal">
        <xs:element name="montant" type="xs:decimal">
      </xs:element>
    </xs:element>
    (...)
    Donc j'ai peur que ce comportement ne soit pas paramétrable...

    Je continue mes investigations...

    Si vous avez des pistes je suis preneur...

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/01/2007, 17h59
  2. [VB .Net 2005][Dataset] Problème d'imbrication de données
    Par 6psyk9 dans le forum Accès aux données
    Réponses: 1
    Dernier message: 15/01/2007, 14h24
  3. [Designer] Problème de transfert de données entre modul
    Par BILLYPATOU dans le forum Designer
    Réponses: 11
    Dernier message: 09/03/2004, 18h15
  4. [Interbase 7] Problème d'insertion de données
    Par Tuscelan dans le forum InterBase
    Réponses: 12
    Dernier message: 19/11/2003, 22h58
  5. problème xsl : inclure une donnée xml dans une balise html
    Par djodjo dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 03/01/2003, 09h24

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