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 :

DataRelation dans DataSet


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mai 2009
    Messages : 99
    Par défaut DataRelation dans DataSet
    Bonjour à tous,

    Je développe une application en interaction avec une base de donnée, on m'a demandé de remonter toutes les données au chargement de l'application afin d'avoir une plus grande fluidité pendant l'utilisation de celle-ci.
    (évidemment ils décident ça a 2 jours de la validation de cette étape de la programmation )


    Je créé donc un DataSet, rempli par des DataTables.
    J'aimerai joindre les tables par une Data relation mais je me confronte à une erreur :
    Je créé ma relation de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim relationiliiim As New DataRelation("ili_iim", DataSetGlobal.Tables(0).Columns(1), DataSetGlobal.Tables(2).Columns(1))
    DataSetGlobal.Relations.Add(relationiliiim)
    A l'execution voici le message d'erreur que j'obtiens :
    Ces colonnes n'ont pas actuellement de valeurs uniques.
    D'après la doc que j'ai lu sur MSDN, l'erreur vient du fait que dans le champ parent, il existe un ou plusieurs résultat(s) qui ne sont pas unique.

    Or lorsque j'execute ma requête sur le serveur dans une table temporaire TEMP et que je fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT Produit,COUNT(*) FROM TEMP GROUP BY Produit HAVING COUNT(*) <> 1
    La table ne me retourne aucun résultat.
    Lorsque je ne fais qu'un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT Produit, COUNT(*) FROM TEMP GROUP BY Produit
    Je vois bienque tous les count ont pour valeur 1 et que j'ai autant de résultat qu'il y a de ligne dans ma table.

    D'où peut venir le fait que visual studio me dise que les valeurs de mon champ ne sont pas uniques ? Si dans la table enfant il y a plusieurs lignes avec le même "Produit" est-ce grave (d'après la doc MSDN non) ?
    Connaissez vous un autre moyen de remonter des table d'une base de données et de joindre ces tables ?
    La DataRelation est-elle la seule façon de joindre plusieurs DataTables d'un même DataSet ?
    Avez vous de l'aspirine ?

    Merci à vous de prendre le temps de me lire et bonne journée !


    ----------
    Précisions :
    Les données sont remontées en 2minutes ~. Si je fais la jointure avant de remonter pour ne créer qu'une table, cela met plus de 10minutes et c'est trop long d'après l'utilisateur.

    Si je fais mes requêtes en live à chaque clic, j'ai des freezes de 30sec ~ et même problème.
    Je dois donc absolument arriver à optimiser la requête qui doit avoir lieu au chargement de l'application.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    L'erreur la plus probable est:

    L'inversion des paramètre childcolumn et parentcolumn sur le constructeur de ta datarelation.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mai 2009
    Messages : 99
    Par défaut
    Je me suis dit la même chose. J'ai vérifié dans l'info-bulles ce n'était pas ça.
    (Dans le doute j'ai tout de même échangé mais cela n'a pas résolu le problème)

  4. #4
    Rédacteur
    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Billets dans le blog
    121
    Par défaut
    Les index des colonnes ne devrais pas commencé à 0?, En principe la première colonne devrais être la clé donc essaie plutôt ceci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim relationiliiim As New DataRelation("ili_iim", DataSetGlobal.Tables(0).Columns(0), DataSetGlobal.Tables(2).Columns(0))
    DataSetGlobal.Relations.Add(relationiliiim)
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mai 2009
    Messages : 99
    Par défaut
    Citation Envoyé par lilroma Voir le message
    Les index des colonnes ne devrais pas commencé à 0?, En principe la première colonne devrais être la clé donc essaie plutôt ceci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim relationiliiim As New DataRelation("ili_iim", DataSetGlobal.Tables(0).Columns(0), DataSetGlobal.Tables(2).Columns(0))
    DataSetGlobal.Relations.Add(relationiliiim)
    Et bien en fait lorsque je déclarais la clé primaire de ma table j'avais la même erreur.
    Ce que je ne comprends d'ailleurs pas car comme je le disais, lorsque j'execute directement la requête sur iSeries, il me renvoi que chaque produit n'existe qu'une seule fois dans la table et ce pour toute les lignes. ( pas de null ou doublons)
    Du coup ma 1ère colonne est un RRN(TABLE) qui génère un nombre unique sur lequel je me base pour ma clé primaire.
    Mon code produit est donc la 2ème colonne et donc bien la numéro index 1.

    Requête qui remplit ma DataTable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT RRN(MaLibrairie.MonFichier),IPROD,IITYP,ICLAS,IDESC,IREF,IWHS from MaLibrairie.MonFichier WHERE IWHS NOT IN ([mes filtres]) AND IID NOT IN ([mes filtres])  AND IPROD NOT IN ([mes filtres])
    Mais cette solution n'est pas viable pour une jointure entre deux tables

    (Je travaille sur un AS400 si cela peut changer quelque-chose...)

  6. #6
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 251
    Par défaut
    on m'a demandé de remonter toutes les données au chargement de l'application afin d'avoir une plus grande fluidité pendant l'utilisation de celle-ci.
    Encore l'idée lumineuse de quelqu'un qui n'a rien compris aux bases de données.

    Les données sont remontées en 2minutes ~. Si je fais la jointure avant de remonter pour ne créer qu'une table, cela met plus de 10minutes et c'est trop long d'après l'utilisateur.
    Plutôt étrange. 10 minutes est vraiment trop long même pour des tables de plusieurs dizaines de Go de données.

    Dans ta base, les colonnes servant de clés sont-elles déclarées comme clés primaires (déjà ça éviterais les doublons sur ces colonnes) ????
    Ces clés sont-elles associées à des index.

    Ensuite les colonnes qui rentrent régulièrement dans tes clauses where sont-elles, elles aussi, indexées ???

    Pour ton problème de requete, est-ce que la colonne Produit sur laquelle tu teste ta requete correspond-elle à la colonne que tu essaye de mettre dans ta relation, car c'est sur cette colonne qu'il y a un doublon. Le doublon n'est pas forcément sur toute la ligne.

Discussions similaires

  1. comment charger toutes les tables dans DataSet
    Par keletigui dans le forum Accès aux données
    Réponses: 1
    Dernier message: 21/02/2007, 20h44
  2. [ADO.NET][C#] Comment recupérer contraintes dans Dataset ?
    Par irnbru dans le forum Accès aux données
    Réponses: 2
    Dernier message: 11/02/2006, 00h53
  3. [ADO.Net][VB.NET/C#]Comment importer .xls dans DataSet ?
    Par smedini dans le forum Accès aux données
    Réponses: 2
    Dernier message: 10/01/2006, 15h59
  4. Réponses: 4
    Dernier message: 22/12/2005, 15h30
  5. pb Displaylabel n'est pas conservé dans DataSet
    Par dem dans le forum Composants VCL
    Réponses: 2
    Dernier message: 17/10/2005, 09h55

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