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 :

VB.NET Recupéré valeur de la BDD dans zone de liste


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 164
    Par défaut VB.NET Recupéré valeur de la BDD dans zone de liste
    Bonjour,
    Je fais un programme qui permet de gérer des concours d'équitation.
    J'ai deux tables :
    Cavalier(NumLicence, NomC, PrenomC, AdrC, TelC, DateNC)
    Cheval(NumSire, Nom, NumLicence#)

    NumLicence clé etrangère de Cheval en relation avec NumLicence clé primaire de cavalier.

    J'ai un formulaire qui permet de visualiser mes Chevaux, de modifier et supprimer.
    Mais j'ai un problème.
    A la visualisation je n'arrive pas a cibler le propriétaire qui correspond au cheval.
    J'arrive a afficher toutes mes informations sauf le nom du proprio qui correspond.
    Par contre j'arrive très bien a afficher tous les propriétaire dans cette zone de liste. Mais pour tous les chevaux ca affiche le premier propriétaire

    J'arrive parfaitement a me connecter a ma base de données et a recupéré les données.

    Voici ma méthode qui affiche mes chevaux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Ecrirechevaux(ByVal numchev As Integer, ByVal numlicence As Integer)
            chevalenreg = maDTChev.Rows(numchev)
            Txtbnomchev.Text = chevalenreg("NumSire")
            Txtbnumsiret.Text = chevalenreg("Nom")
            proprioenreg = maDTProprio.Rows(numlicence)
            Cbxpropriochev.Text = proprioenreg("NomC")
     
        End Sub
    Et voici le code qui permet de recupéré les données du cheval et du cavalier au chargement du formulaire:

    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
    Private Sub FrmVisuChevaux_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'CHARGEMENT DU FORMULAIRE
            Try
                maConnexion.Open()
                MsgBox("ok")
     
                sqlcheval = "select NumSire , Nom , NumLicence from Cheval"
                maCommandCheval.CommandText = sqlcheval
                maCommandCheval.Connection = maConnexion
                monDACheval.SelectCommand = maCommandCheval
                monDACheval.Fill(datasetcheval, "liste des chevaux")
                maDTChev = datasetcheval.Tables("liste des chevaux")
     
                sqlproprio = "select NumLicence , NomC , PrenomC from Cavalier"
                maCommandProprio.CommandText = sqlproprio
                maCommandProprio.Connection = maConnexion
                monDAProprio.SelectCommand = maCommandProprio
                monDAProprio.Fill(datasetproprio, "liste des proprio")
                maDTProprio = datasetproprio.Tables("liste des proprio")
                Cbxpropriochev.DataSource = maDTProprio
                Cbxpropriochev.ValueMember = "NumLicence"
                Cbxpropriochev.DisplayMember = "NomC"
     
                Ecrirechevaux(idchev, numlicence)
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
            maConnexion.Close()
        End Sub
    Merci de vos reponses !

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    une jointure
    (INNER JOIN)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2009
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 99
    Par défaut
    Bonjour,

    En fait, quand tu fais ta requete pour afficher le nom du cavalier, tu ne donnes pas de condition. Essais quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select NumLicence, NomC, PrenomC 
    From Cavalier inner join Cheval on Cheval.NumLicence = Cavalier.NumLicence
    Where NumSire = numchev

  4. #4
    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
    Voilà la requête qui affichera correctement les données voulues :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT NumSire,Nom,NomC,PrenomC                          'Selection des champs à afficher
    FROM Cavalier , Cheval                                   'Selection des tables concernées
    Where Cheval.NumLicence = Cavalier.Numliscence           'Jointure entre les deux tables
    Si un proprietaire possède plusieurs chevaux tu peux regrouper par propriétaires :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Cavalier.NumLicence,NomC,PrenomC,NumSire,Nom                          'Selection des champs à afficher
    FROM Cavalier , Cheval                                   'Selection des tables concernées
    WHERE Cheval.NumLicence = Cavalier.Numliscence           'Jointure entre les deux tables
    GROUP BY Cavalier.NumLicence
    Il ne te reste plus qu'a attribuer dans les chaînes tout en prennant soin bien sûr de tirer les commentaires :p

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    n'empeche qu'un INNER JOIN c'est toujours mieux qu'un bricolage à l'ancienne dans le WHERE ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 164
    Par défaut
    Bonjour,
    Tous d'abord désolé de repondre aussi tard :s !
    Ensuite j'ai opté pour la clause where !
    Cela me donne sa !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    sqlcheval = "SELECT NumSire,Nom,NomC,PrenomC FROM Cavalier, Cheval Where Cheval.NumLicence = Cavalier.Numlicence"
                maCommandCheval.CommandText = sqlcheval
                maCommandCheval.Connection = maConnexion
                monDACheval.SelectCommand = maCommandCheval
                monDACheval.Fill(datasetcheval, "liste des chevaux")
                maDTChev = datasetcheval.Tables("liste des chevaux")
     
                Cbxpropriochev.DataSource = maDTChev
                Cbxpropriochev.ValueMember = "NumLicence"
                Cbxpropriochev.DisplayMember = "NomC"
     
                Ecrirechevaux(idchev, numlicence)
    Le problème est que j'ai besoin de 'NumLicence' dans mon select pour mon 'ValueMember', j'ai donc rajouter se champs dans mon select.

    Le soucis est que quand je lance mon application il me met un message d'erreur qui est celui ci :
    "Le champs spécifié 'NumLicence' peut désigner plusieurs tables listées dans la clause FROM de votre instriction SQL"
    Merci de vos reponses

  7. #7
    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
    "Le champs spécifié 'NumLicence' peut désigner plusieurs tables listées dans la clause FROM de votre instriction SQL"

    En gros l'avertissement dit qu'il existe un champ 'NumLicence' dans plusieurs tables. Quand il éxecute la requête, le champ est ambigüe car il ne sais pas celui de quelle table prendre. Précise juste le nom de la table

    Exemple : NumLicence de la table cavalier = Cavalier.NumLicence

    Il suffit donc de remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cbxpropriochev.ValueMember = "NumLicence"
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cbxpropriochev.ValueMember = "Cavalier.NumLicence"

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 164
    Par défaut
    D'accord merci de tes explications !!! : D


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    sqlcheval = "SELECT NumSire,Nom,NomC,PrenomC,NumLicence FROM Cavalier, Cheval Where Cheval.NumLicence = Cavalier.Numlicence"
                maCommandCheval.CommandText = sqlcheval
                maCommandCheval.Connection = maConnexion
                monDACheval.SelectCommand = maCommandCheval
                monDACheval.Fill(datasetcheval, "liste des chevaux")
                maDTChev = datasetcheval.Tables("liste des chevaux")
     
                Cbxpropriochev.DataSource = maDTChev
                Cbxpropriochev.ValueMember = "Cavalier.NumLicence"
                Cbxpropriochev.DisplayMember = "NomC"
     
                Ecrirechevaux(idchev, numlicence)
    J'ai fais comme tu me l'a dit mais il est toujours pas content. Il m'affiche le même message d'erreur... :/

  9. #9
    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
    Si c'est toujours le même message d'erreur, c'est toujours une ambiguité.

    Le seul endroit restant ou il peut y en avoir une est dans ton select.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlcheval = "SELECT NumSire,Nom,NomC,PrenomC,NumLicence FROM Cavalier, Cheval Where Cheval.NumLicence = Cavalier.Numlicence"
    Comme tu fais ici la jointure, dans ton select tu devras aussi préciser la table :

    Essaye de remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT NumSire,Nom,NomC,PrenomC,NumLicence FROM Cavalier, Cheval Where Cheval.NumLicence = Cavalier.Numlicence
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT NumSire,Nom,NomC,PrenomC,Cavalier.NumLicence FROM Cavalier, Cheval Where Cheval.NumLicence = Cavalier.Numlicence
    (J'ai souligné les modifications)
    Si cela ne marche pas, j'avoue que je sèche sur l'erreur d'ambiguité

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 164
    Par défaut
    Je me suis effectivement dit la même chose que toi !
    Et j'ai rajouter Cavalier.NumLicence

    Et.........

    Un nouveau message d'erreur !!! Différent par contre.
    "Impossible de créer une liste enfant pour le champ Cavalier."
    Et quand je "valide le message d'erreur" il m'affiche mon interface graphique ou il est sensé m'afficher mes chevaux et dans la zone de liste de mes propriétaire il y a "System.Data.DataRowView"

    Si sa peut t'aider :s

  11. #11
    Membre éprouvé
    Inscrit en
    Avril 2009
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 99
    Par défaut
    Oui, en fait, il faut que tu mettes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT NumSire,Nom,NomC,PrenomC,Cavalier.NumLicence FROM Cavalier, Cheval Where Cheval.NumLicence = Cavalier.Numlicence
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Cbxpropriochev.DataSource = maDTChev
    Cbxpropriochev.ValueMember = "NumLicence"
    Cbxpropriochev.DisplayMember = "NomC"
    Parce qu'il y a ambiquïté uniquement dans ta requete, pas dans la définition de ta combo...

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

Discussions similaires

  1. [Débutant] Comment recupérer valeur d'un textbox dans un état crystal report
    Par ronot dans le forum ASP.NET
    Réponses: 0
    Dernier message: 07/02/2013, 19h23
  2. Récupérez des valeurs de la Bdd dans une listBox (MVC3)
    Par Fra212 dans le forum Entity Framework
    Réponses: 4
    Dernier message: 28/02/2012, 13h22
  3. Réponses: 4
    Dernier message: 11/04/2007, 16h03
  4. [MySQL] Affichage d'une valeur de la bdd dans un input
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 23/02/2006, 12h28

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