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

C# Discussion :

remplissage de listbox par colonnes issue de Mysql


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Par défaut remplissage de listbox par colonnes issue de Mysql
    Bonjour,

    je suis actuellement sur la réalisation d'un projet de médiathèque pour mon cours de technique informatique. ci-joint vous pourrez trouver le modèle logique de données associé à ce projet.
    Mon but est de remplir plusieurs listbox par le nom et le prénom des tables acteur/producteur/réalisateur mais le problème est que ces noms et prénoms proviennent d'une autre table ("personne").

    voici le code d'où provient l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    listBox1.Items.Add(reader.GetString("nom"));
                        listBox2.Items.Add(reader.GetString("prénom"));
                        listBox3.Items.Add(reader.GetString("nom"));
                        listBox4.Items.Add(reader.GetString("prénom"));
                        listBox5.Items.Add(reader.GetString("nom"));
                        listBox6.Items.Add(reader.GetString("prénom"));
    l'erreur étant que les listbox à numero impair ne sont remplies que par les noms des acteurs et les listbox à numero pair par les prénoms des acteurs. Comme vous pouvez le constater sur le MLD ci-joint, chaque nom et prénom provient de la classe personne. Pour obtenir les noms et prénoms des tables acteur, producteur et réalisateur j'ai dû utiliser des alias. Voici la requête Mysql lancée par mon application :

    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
    string query =  "select distinct media.titre, media.genre, media.adressepc, media.annéedesortie, media.durée, media.saga, personne.nom, personne.prénom, P2.nom, P2.prénom, P3.nom, P3.prénom, pays.nompays " +
                                    "from media " +
                                    "inner join pays " +
                                    "on pays.idmedia=media.idmedia " +
                                    "inner join acteur " +
                                    "on acteur.idmedia=media.idmedia " +
                                    "inner join realisateur " +
                                    "on realisateur.idmedia=media.idmedia " +
                                    "inner join producteur " +
                                    "on producteur.idmedia=media.idmedia " +
                                    "INNER JOIN personne " + 
                                    "ON personne.idpersonne=acteur.idpersonne " +
                                    "INNER JOIN personne as P2 " +
                                    "ON P2.idpersonne=realisateur.idpersonne " + 
                                    "INNER JOIN personne as P3 " +
                                    "ON P3.idpersonne=producteur.idpersonne " +
                                    "where media.titre like '%" + textBox1.Text + "%';";
    et voici le code complet associé au bouton de recherche du film :

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    private void button1_Click(object sender, EventArgs e)
            {
                if (textBox1.Text == "")
                {
                    MessageBox.Show("veuillez spécifier le nom du film dont vous recherchez la fiche", "erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
     
                    listBox1.Items.Clear();
                    listBox2.Items.Clear();
                    listBox3.Items.Clear();
                    listBox4.Items.Clear();
                    listBox5.Items.Clear();
                    listBox6.Items.Clear();
     
                    string query =  "select distinct media.titre, media.genre, media.adressepc, media.annéedesortie, media.durée, media.saga, personne.nom, personne.prénom, P2.nom, P2.prénom, P3.nom, P3.prénom, pays.nompays " +
                                    "from media " +
                                    "inner join pays " +
                                    "on pays.idmedia=media.idmedia " +
                                    "inner join acteur " +
                                    "on acteur.idmedia=media.idmedia " +
                                    "inner join realisateur " +
                                    "on realisateur.idmedia=media.idmedia " +
                                    "inner join producteur " +
                                    "on producteur.idmedia=media.idmedia " +
                                    "INNER JOIN personne " + 
                                    "ON personne.idpersonne=acteur.idpersonne " +
                                    "INNER JOIN personne as P2 " +
                                    "ON P2.idpersonne=realisateur.idpersonne " + 
                                    "INNER JOIN personne as P3 " +
                                    "ON P3.idpersonne=producteur.idpersonne " +
                                    "where media.titre like '%" + textBox1.Text + "%';";
     
     
                    MySqlCommand cmd = new MySqlCommand(query, connection);
                    MySqlDataReader reader;
                    reader = cmd.ExecuteReader();
     
     
                    while (reader.Read())
                    {
                        label6.Text=reader.GetString("annéedesortie");
                        label8.Text=reader.GetString("genre");
                        label24.Text=reader.GetString("nompays");
                        label7.Text = reader.GetString("durée");
                        label22.Text=reader.GetString("saga");
                        label14.Text=reader.GetString("adressepc");
                        listBox1.Items.Add(reader.GetString("personne.nom"));
                        listBox2.Items.Add(reader.GetString("personne.prénom"));
                        listBox3.Items.Add(reader.GetString("P2.nom"));
                        listBox4.Items.Add(reader.GetString("P2.prénom"));
                        listBox5.Items.Add(reader.GetString("P3.nom"));
                        listBox6.Items.Add(reader.GetString("P3.prénom"));
     
                    }
     
     
                    reader.Close();
     
     
     
                }
            }
    Je suis à votre entière disposition si vous avez besoin de plus d'informations. Merci pour votre disposition, j'espère avoir une réponse assez vite, le problème est assez urgent.
    Images attachées Images attachées  

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Si je comprends bien, ton problème vient du fait que tu n'arrives pas à distinguer le prénom d'un acteur du prénom d'un producteur ?

    Si c'est bien ça, il faut rajouter des alias dans ta requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT personne.nom AS ActeurNom, personne.prénom AS ActeurPrenom, P2.nom AS RealisateurNom, P2.prénom AS RealisateurPrenom, P3.nom AS ProducteurNom, P3.prénom AS ProducteurPrenom
    Puis quand tu lis les données, tu les utilises :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    listBox1.Items.Add(reader.GetString("ActeurNom"));
    listBox2.Items.Add(reader.GetString("ActeurPrenom"));
    listBox3.Items.Add(reader.GetString("RealisateurNom"));
    listBox4.Items.Add(reader.GetString("RealisateurPrenom"));
    listBox6.Items.Add(reader.GetString("ProducteurNom"));
    Au passage pour le code associé au bouton de recherche du film, tu devrais utiliser une requête paramétrée (il suffit de remplacer les objets Sql* par des objets MySql).
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Par défaut
    merci pour ta réponse dotnetmatt !!

    C'est exactement ce que je recherchais.

    J'ai maintenant un autre problème : lorsque par exemple je sélectionne un film comportant 4 acteurs, 1 producteur et 1 réalisateur. Le programme m'affiche 4 acteurs, 4 producteurs (les mêmes), 4 réalisateurs (les mêmes). Y'a t'il un moyen de n'afficher qu'un seul producteur s'il n'y en a qu'un dans la base de donnée (et même chose pour le réalisateur) ? je pensais que le "distinct" me permettait justement d'éviter ce genre de résultat...

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Par défaut
    j'ai trouvé par moi-même, suffisait d'introduire une double boucle for et utiliser la fonction RemoveAT pour supprimer les doublons.

  5. #5
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Par défaut
    "Pouarf" ça ne me semble pas très optimisé tout ça
    En général il vaut mieux travailler sa requête plutôt que d'user d'artifices comme ça...

    Tu peux mettre "LEFT" au lieu de "INNER" tu n'auras pas de "doublons" tu auras :
    FILM ANNEE ACTEUR1 REALISATEUR1 PRODUCTEUR1
    FILM ANNEE ACTEUR2 NULL NULL
    FILM ANNEE ACTEUR3 NULL NULL
    FILM ANNEE ACTEUR4 NULL NULL
    Mais rien de mieux avec la façon dont est tournée ta requête.

    Je pense plutôt que tu devrais faire ça en plusieurs étapes :
    1 - ta requête SELECT LIKE ...
    2 - sélection d'un film parmi les films correspondants au filtre
    3 - sélection du/des producteurs affichage dans un tableau
    4 - .......................... acteurs ......................................
    5 - ........................... réalisateur.................................

Discussions similaires

  1. [AC-2007] Remplissage de listbox par programmation
    Par lethunder1014 dans le forum IHM
    Réponses: 4
    Dernier message: 24/10/2010, 21h37
  2. [VBA-E] Séparer les colonnes d'une listbox par des lignes?
    Par mulot03 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/05/2006, 14h03
  3. [HTML] Construire un tableau colonne par colonne ?
    Par Cthulhu 22 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 11/05/2005, 15h31
  4. Remplissage à part d'une colonne
    Par LaNat dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/04/2005, 14h10
  5. [VB.NET] Écriture par colonne streamwriter...?
    Par Pleymo dans le forum Windows Forms
    Réponses: 5
    Dernier message: 15/04/2005, 15h32

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