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

Windows Forms Discussion :

Question de logique avec groupbox [Débutant]


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Question de logique avec groupbox
    Bonjour,

    Alors j'ai un projet c# et je bloque sur un certain point, c'est surement une question d'algorithmie mais je ne parviens pas a trouver le bon truc.

    Le but est d'afficher un élève aléatoirement à partir d'un requête sql en fonction du groupe coché dans une group box.

    j'ai un fichier dataAccess qui gère la connexion:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     DataAccess dataA = new DataAccess();
     
                dataA.openConnection();
    Et maintenant le problème c'est la requête :

    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
     
    String sql = "select top(1) e.ideleve,e.idgroupe,e.nomeleve,e.prenomeleve,g.libellegroupe " +
                             "From eleve e " +
                             "join groupe g on e.idgroupe = g.idgroupe " +
                             "where ";
     
                // HELP HERE !!!
                if (cbxGroupeA.Checked == true)
                {
                    sql += "g.libellegroupe='" +cbxGroupeA.Text + "'";
                }
                if (cbxGroupeB.Checked == true)
                {
                       sql += " or g.libellegroupe='" + cbxGroupeB.Text + "'";
                }
                if (cbxGroupeC.Checked == true)
                {
                       sql += " or g.libellegroupe='" + cbxGroupeC.Text + "'";
     
                }
                if (cbxGroupeD.Checked == true)
                {
                       sql += " or g.libellegroupe='" + cbxGroupeD.Text + "'";
     
                }
                sql += " order by newid()"; //permet de récuperer la première ligne du résultat de la requête, c'est ordonné aléatoirement
    Comme vous le voyez il y a des "or" partout sauf dans le premier, du coup je ne peux pas décocher cette case sinon ça génère une erreur.

    ma question est comment je pourrais faire en sorte de ne mettre un 'or' que si un élément à déjà auparavant été sélectionné dans ma group box ?

    et pour finir le traitement pas très compliqué :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SqlDataReader dataT = dataA.getData(sql); 
     
                while(dataT.Read())
                {
                    nom = dataT["nomeleve"].ToString();
                    prenom = dataT["prenomeleve"].ToString();
                    groupe = dataT["libellegroupe"].ToString();
                }
                dataT.Close();
    dataA.closeConnection();
    J'ai essayé avec une fausse condition "where 1=1" puis j'enchaine mais elle ne fonctionne pas avec un or.
    Je pense qu'il faut faire une boucle avec un for mais je ne vois pas comment faire....
    Help please !

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

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

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    Salut,
    tu peux faire comme ça :
    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
     
    string sql = "select top(1) e.ideleve,e.idgroupe,e.nomeleve,e.prenomeleve,g.libellegroupe " +
                             "From eleve e " +
                             "join groupe g on e.idgroupe = g.idgroupe " +
                             "where ";
     
                // HELP HERE !!!
                bool needOr = false;
                if (cbxGroupeA.Checked)
                {
                    sql += "g.libellegroupe='" + cbxGroupeA.Text + "'";
                    needOr = true;
                }
                if (cbxGroupeB.Checked)
                {
                    if (needOr)
                    {
                         sql += " or ";
                    }
                    sql += " g.libellegroupe='" + cbxGroupeB.Text + "'";
                    needOr = true;
                }
                if (cbxGroupeC.Checked)
                {
                    if (needOr)
                    {
                        sql += " or ";
                    }
                    sql += " g.libellegroupe='" + cbxGroupeC.Text + "'";
                    needOr = true;
     
                }
                if (cbxGroupeD.Checked)
                {
                    if (needOr)
                    {
                        sql += " or ";
                    }
                    sql += " g.libellegroupe='" + cbxGroupeD.Text + "'";
                    needOr = true;
                }
                sql += " order by newid()"; //permet de récuperer la première ligne du résultat de la requête, c'est ordonné aléatoirement
    En fait dès qu'on passe dans un if on met notre booléen à true; en testant sa valeur avant d'ajouter ta condition tu peux donc savoir si on est déjà passé dans un if et donc ajouter ton mot clé "or";

    Aussi renseignes toi sur les requêtes paramétrées (ou demande à ton prof) plutôt que de passer la valeur de tes paramètres dans ta requête. La synthase ne change quasiment pas et ça peut éviter des surprises comme par exemple un --> ' dans le libellé d'un groupe.

    A+

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Re-Bonjour,

    Merci pour ta solution !

    Sinon j'en avais trouvé une autre entre temps, j'ai fait un "while 1=2" ce qui est faux et du coup j'ai mis de or partout.
    en gros ca fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select champ from table where 1=2 or champ1='valeur1' //or ....

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

Discussions similaires

  1. Composant, socket et question de logique
    Par Hervé Saladin dans le forum Composants VCL
    Réponses: 1
    Dernier message: 09/04/2006, 16h56
  2. Quelques questions pour débuter avec FOP
    Par lr dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 08/04/2006, 13h09
  3. Question sur ASP avec PWS
    Par Teo dans le forum ASP
    Réponses: 3
    Dernier message: 27/10/2005, 08h16

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