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 :

Boucle FOR / IF


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    BAC +3
    Inscrit en
    Octobre 2018
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : BAC +3

    Informations forums :
    Inscription : Octobre 2018
    Messages : 164
    Points : 92
    Points
    92
    Par défaut Boucle FOR / IF
    Bonjour , je suis complètement perdu et à cour de solutions et j'aimerais des pistes parce que je n'y arrive plus voilà mon soucis.

    Contexte :
    J'ai 6 Combobox : (CatégorieRadiologique_ComboBox_Home, CodeEtatFS_ComboBox_Home, Producteur_ComboBox_Home, Centre_ComboBox_Home, StationDestination_ComboBox_Home, Conditionnement_ComboBox_Home) sur une Form.

    En fonction des choix de l'utilisateurs je dois effectuer une recherche dans ma base de données pour afficher des données dans une listview.
    Cependant pour arriver à gérer plusieurs critères en même temps ma requête doit être adaptable.
    Du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     ("SELECT FS , Radiologique , Lib_Code_Etat , Producteur , Centre , Station_Destination , Conditionnement " +
                        "FROM fiche " +
                        "JOIN ctg_rad ON fiche.ID_Rad = ctg_rad.ID_Rad " +
                        "JOIN etat ON fiche.Code_Etat = etat.Code_Etat  " +
                        "JOIN prod ON fiche.Code_Producteur = prod.Code_Producteur  " +
                        "JOIN site_centre ON fiche.Code_Centre = site_centre.Code_Centre " +
                        "JOIN station_destination ON fiche.Code_StationdeDestination = station_destination.Code_StationdeDestination " +
                        "JOIN statut_condition ON fiche.Code_Conditionnement = statut_condition.Code_Conditionnement WHERE " + PARTIE_DE_LA_REQUÊTE_ADAPTABLE, connection)
    Cette partie de requête ( PARTIE_DE_LA_REQUÊTE_ADAPTABLE ) je l'ai appelée "REQUERY".
    Maintenant voici mon code (du moins la partie concernée) :

    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
    65
    66
    67
    68
    69
    70
    71
    72
     string REQUERY = "";
     
                    string[] Index = new string[] { CatégorieRadiologique_ComboBox_Home.Text, CodeEtatFS_ComboBox_Home.Text, Producteur_ComboBox_Home.Text, Centre_ComboBox_Home.Text, StationDestination_ComboBox_Home.Text, Conditionnement_ComboBox_Home.Text };
                    for (int i = 0; i < Index.Length; i++)
                    {
                        if (Index[i] == CatégorieRadiologique_ComboBox_Home.Text)
                        {
                            if (CatégorieRadiologique_ComboBox_Home.Text == "")
                            {
                                REQUERY += REQUERY + "Radiologique =" + "'" + CatégorieRadiologique_ComboBox_Home.Text + "'";
                            }
                            else
                            {
                                REQUERY += REQUERY + " AND Radiologique =" + "'" + CatégorieRadiologique_ComboBox_Home.Text + "'";
                            }
                        }
                        else if (Index[i] == CodeEtatFS_ComboBox_Home.Text)
                        {
                            if (CodeEtatFS_ComboBox_Home.Text == "")
                            {
                                REQUERY += REQUERY + "Lib_Code_Etat =" + "'" + CodeEtatFS_ComboBox_Home.Text + "'";
                            }
                            else
                            {
                                REQUERY += REQUERY + " AND Lib_Code_Etat =" + "'" + CodeEtatFS_ComboBox_Home.Text + "'";
                            }
                        }
                        else if (Index[i] == Producteur_ComboBox_Home.Text)
                        {
                            if (Producteur_ComboBox_Home.Text == "")
                            {
                                REQUERY += REQUERY + "Producteur =" + "'" + Producteur_ComboBox_Home.Text + "'";
                            }
                            else
                            {
                                REQUERY += REQUERY + " AND Producteur =" + "'" + Producteur_ComboBox_Home.Text + "'";
                            }
                        }
                        else if (Index[i] == Centre_ComboBox_Home.Text)
                        {
                            if (Centre_ComboBox_Home.Text == "")
                            {
                                REQUERY += REQUERY + "Centre =" + "'" + Centre_ComboBox_Home.Text + "'";
                            }
                            else
                            {
                                REQUERY += REQUERY + " AND Centre =" + "'" + Centre_ComboBox_Home.Text + "'";
                            }
                        }
                        else if (Index[i] == StationDestination_ComboBox_Home.Text)
                        {
                            if (StationDestination_ComboBox_Home.Text == "")
                            {
                                REQUERY += REQUERY + "Station_Destination =" + "'" + StationDestination_ComboBox_Home.Text + "'";
                            }
                            else
                            {
                                REQUERY += REQUERY + " AND Station_Destination =" + "'" + StationDestination_ComboBox_Home.Text + "'";
                            }
                        }
                        else if (Index[i] == Conditionnement_ComboBox_Home.Text)
                        {
                            if (CatégorieRadiologique_ComboBox_Home.Text == "")
                            {
                                REQUERY += REQUERY + "Conditionnement =" + "'" + Conditionnement_ComboBox_Home.Text + "'";
                            }
                            else
                            {
                                REQUERY += REQUERY + " AND Conditionnement =" + "'" + Conditionnement_ComboBox_Home.Text + "'";
                            }
                        }
                    }
    En gros ce que je souhaite faire :
    -Tu parcours le tableau
    - Pour chaque ligne tu vérifie de quelle combobox on parle
    - Si on parle de la combobox ABC alors tu rentre dans la condition et dans cette condition. Si la variable REQUERY est vide alors tu ajoute "AND ...." (Sinon tu ajoute mais sans le AND) et tu passe à la ligne du tableau suivante ( i++) et tu recommence de sorte à traiter toutes lignes afin de construire le WHERE de la requête REQUERY . Mais ça ne marche pas , il ne passe pas à la ligne d'après.

    Pouvez vous m'aider ? Besoin de plus d'info ?

    ""#############""
    MERCI D'AVANCE
    ""#############""

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    3ème ou 4ème topic pour la même question, enfin ce coup l'énnoncé est clair (même si on avait fini par comprendre dans les autres ^^)


    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
    var query= "select … from table + jointures"; // pas de where
     
    var whereConditions = new List<string>();
     
    if (cmb1.selecteditem != null) whereConditions.Add("field1 = " + cmb1.Text);
    if (cmb2.selecteditem != null) whereConditions.Add("field2 = " + cmb2.Text);
    // ...
     
    if whereConditions.Count > 0)
    {
        query = query + " WHERE ";
        query = query + string.Join(" AND ", whereConditions);
    }
     
    // query est prête

    après c'est dangereux de concaténer des valeurs dans une requete, normalement il faut faire "field1 = @field1"
    @ permettant de définir une variable paramètre, puis faire LeSqlCommand.Parameters.Add("@field1", … (type et valeur)

    d'ailleurs on utilise pas .text sur un combobox, mais le selecteditem, casté si nécessaire,
    car oui on met rarement des strings dans un combobox mais des objets, pour pouvoir retrouver l'id qui va avec
    et là aussi on ne met pas des strings dans les tables pour des types de choses, mais on a une sous table "d'enum" et donc des ids pour faire la jointure …

    mais bon comme je l'ai dit dans l'autre topic, il te manque beaucoup de bases et de connaissances, donc si tu veux en faire ton métier arrête de coder et renseigne toi
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre régulier
    Homme Profil pro
    BAC +3
    Inscrit en
    Octobre 2018
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : BAC +3

    Informations forums :
    Inscription : Octobre 2018
    Messages : 164
    Points : 92
    Points
    92
    Par défaut
    Oui désolé en fait je débute et je n'arrive pas à clarifier cette partie dans ma tête surtout que j'apprend seul donc j'essaye de me débrouiller comme je peux. C'est déjà plus clair pour moi merci bcp

    En fait je l'ai fait plus bas les @field , bon le début du code est faux mais en gros toute ma conditions donne ç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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    else if (CatégorieRadiologique_ComboBox_Home.SelectedIndex != -1 | CodeEtatFS_ComboBox_Home.SelectedIndex != -1 | Producteur_ComboBox_Home.SelectedIndex != -1 | Centre_ComboBox_Home.SelectedIndex != -1 | StationDestination_ComboBox_Home.SelectedIndex != -1 | Conditionnement_ComboBox_Home.SelectedIndex != -1)
                {
                    string REQUERY = "";
     
                    (PARTIE EN COURS DE MODIF)
     
     
                    MySqlCommand cmd = new MySqlCommand("SELECT FS , Radiologique , Lib_Code_Etat , Producteur , Centre , Station_Destination , Conditionnement " +
                        "FROM fiche " +
                        "JOIN ctg_rad ON fiche.ID_Rad = ctg_rad.ID_Rad " +
                        "JOIN etat ON fiche.Code_Etat = etat.Code_Etat  " +
                        "JOIN prod ON fiche.Code_Producteur = prod.Code_Producteur  " +
                        "JOIN site_centre ON fiche.Code_Centre = site_centre.Code_Centre " +
                        "JOIN station_destination ON fiche.Code_StationdeDestination = station_destination.Code_StationdeDestination " +
                        "JOIN statut_condition ON fiche.Code_Conditionnement = statut_condition.Code_Conditionnement WHERE " + REQUERY, connection);                                              // Requète SQL SELECT
     
                    cmd.Parameters.AddWithValue("@FS", FS_TextBox_Home.Text);          //Récupération du FS souhaité par l'utilisateur
                    cmd.Parameters.AddWithValue("@Radiologique", CatégorieRadiologique_ComboBox_Home.Text);          //Récupération du ID_Rad souhaité par l'utilisateur
                    cmd.Parameters.AddWithValue("@Lib_Code_Etat", CodeEtatFS_ComboBox_Home.Text);                                //Récupération du Code_Etat souhaité par l'utilisateur
                    cmd.Parameters.AddWithValue("@Producteur", Producteur_ComboBox_Home.Text);                          //Récupération du Code_Producteur souhaité par l'utilisateur
                    cmd.Parameters.AddWithValue("@Centre", Centre_ComboBox_Home.Text);                                  //Récupération du Code_Centre souhaité par l'utilisateur
                    cmd.Parameters.AddWithValue("@Station_Destination", StationDestination_ComboBox_Home.Text);        //Récupération du Code_StationdeDestination souhaité par l'utilisateur
                    cmd.Parameters.AddWithValue("@Conditionnement", Conditionnement_ComboBox_Home.Text);                      //Récupération du Code_Conditionnement souhaité par l'utilisateur
     
                    if (Connecté)
                    {
                        using (
                            MySqlDataReader Lire = cmd.ExecuteReader())
                        {
                            while (Lire.Read())  // Boucle While qui regarde toutes les infos que l'on souhaite voir avec la méthode "lire"
                            {
                                string FS = Lire["FS"].ToString();                                                              // Declaration des colonnes et leurs équivalents (remplacants)
                                string Radiologique = Lire["Radiologique"].ToString();
                                string Lib_Code_Etat = Lire["Lib_Code_Etat"].ToString();
                                string Producteur = Lire["Producteur"].ToString();
                                string Centre = Lire["Centre"].ToString();
                                string Station_Destination = Lire["Station_Destination"].ToString();
                                string Conditionnement = Lire["Conditionnement"].ToString();
     
                                LW_FS_Home.Items.Add(new ListViewItem(new[] { FS, Radiologique, Lib_Code_Etat, Producteur, Centre, Station_Destination, Conditionnement }));// Ajout des nouvelles valeurs dans la list view
     
                            }
                        }
                        connection.Close();
                    }
                    else
                    {
                        MessageBox.Show("Erreur de connexion");
                        connection.Close();
                    }
     
     
                }
    Mais du coup je vais changer la façon donc je l'ai écris et revenir ici pour faire un retour ...

  4. #4
    Membre régulier
    Homme Profil pro
    BAC +3
    Inscrit en
    Octobre 2018
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : BAC +3

    Informations forums :
    Inscription : Octobre 2018
    Messages : 164
    Points : 92
    Points
    92
    Par défaut
    OOOK ça donne ç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
     var query = "SELECT FS , Radiologique , Lib_Code_Etat , Producteur , Centre , Station_Destination , Conditionnement " +
                        "FROM fiche " +
                        "JOIN ctg_rad ON fiche.ID_Rad = ctg_rad.ID_Rad " +
                        "JOIN etat ON fiche.Code_Etat = etat.Code_Etat  " +
                        "JOIN prod ON fiche.Code_Producteur = prod.Code_Producteur  " +
                        "JOIN site_centre ON fiche.Code_Centre = site_centre.Code_Centre " +
                        "JOIN station_destination ON fiche.Code_StationdeDestination = station_destination.Code_StationdeDestination " +
                        "JOIN statut_condition ON fiche.Code_Conditionnement = statut_condition.Code_Conditionnement";
     
                    var whereConditions = new List<string>();
     
                    if (CatégorieRadiologique_ComboBox_Home.SelectedIndex != -1) whereConditions.Add("Radiologique = " + "'" + CatégorieRadiologique_ComboBox_Home.Text + "'" );
                    if (CodeEtatFS_ComboBox_Home.SelectedIndex != -1) whereConditions.Add("Lib_Code_Etat = " + "'" + CodeEtatFS_ComboBox_Home.Text + "'" );
                    if (Producteur_ComboBox_Home.SelectedIndex != -1) whereConditions.Add("Producteur = " + "'" + Producteur_ComboBox_Home.Text + "'" );
                    if (Centre_ComboBox_Home.SelectedIndex != -1) whereConditions.Add("Centre = " + "'" + Centre_ComboBox_Home.Text + "'" );
                    if (StationDestination_ComboBox_Home.SelectedIndex != -1) whereConditions.Add("Station_Destination = " + "'" + StationDestination_ComboBox_Home.Text + "'" );
                    if (Conditionnement_ComboBox_Home.SelectedIndex != -1) whereConditions.Add("Conditionnement = " + "'" + Conditionnement_ComboBox_Home.Text + "'" );
                    // ...
     
                    if (whereConditions.Count > 0)
                    {
                        query = query + " WHERE ";
                        query = query + string.Join(" AND ", whereConditions);
                    }
     
                    MessageBox.Show(query);
    Tout marche parfait
    Merci beaucoup encore et désolé pour les différents topic, je manquais de clarté à chaque fois

  5. #5
    Membre actif
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2016
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

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

    Informations forums :
    Inscription : Mars 2016
    Messages : 154
    Points : 268
    Points
    268
    Par défaut
    Citation Envoyé par BiRoy Voir le message
    .......
    Tout marche parfait
    Merci beaucoup encore et désolé pour les différents topic, je manquais de clarté à chaque fois
    Si te est le cas marquez le sujet comme résolu

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

Discussions similaires

  1. Boucle for dans un script cmd
    Par nicolas.ganache dans le forum Développement
    Réponses: 4
    Dernier message: 19/07/2004, 16h07
  2. Réponses: 3
    Dernier message: 06/07/2004, 10h21
  3. [Debutant] Batch et Boucle for
    Par ludovic.fernandez dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 06/05/2004, 19h21
  4. [Swing][boucles] for, do, if .....comment faire simple?
    Par chastel dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 02/05/2004, 22h49
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 11h54

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