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 :

Problème de requête ? Je ne pense pas ..


Sujet :

Windows Forms

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut Problème de requête ? Je ne pense pas ..
    Et bien bonjour à tous je reviens à l'assaut en ces lieux pour encore vous demandez de l'aide. Souvenez vous, j'ai demandé de l'aide hier pour me débloqué pour l'affichage dans un datagridview (les données étant dans un serveur distant mysql). Soit, j'ai bien avancé, voici mon problème :

    Une textbox va contenir un ID produit, une autre textbox va contenir le nom du produit. L'utilisateur va pouvoir choisir de faire une recherche soit par l'ID produit soit par son nom.

    Pour ce qui est de la recherche par ID produit, ca marche. A l'inverse, la recherche par le nom du produit ne fonctionne pas

    Voici le code!

    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
     
    private void button1_Click(object sender, EventArgs e)
            {
                //Définition
                string valeur_txtbox1;
                string valeur_txtbox2;
     
                //Ces deux méthodes définis auparavant permettent de retourner la valeur qu'il y a dans la textbox
                valeur_txtbox1 = get_txtbox(textBox1.Text);
                valeur_txtbox2 = get_txtbox(textBox2.Text);
     
                //Création du Dataset
                DataSet ds = new DataSet();
     
                //Chaine de connexion
                MySQLDriverCS.MySQLConnection conn = new MySQLDriverCS.MySQLConnection(new MySQLDriverCS.MySQLConnectionString("www.lala.com", "bdd", "login", "mdp").AsString);
     
                //Tentative de connexion
                try
                {
                    conn.Open();
                }
                catch (Exception)
                {
                    MessageBox.Show("ERREUR DE CONNEXION !!");
                }
     
                //Choisir CIP ou Nom du produit ??
                if (valeur_txtbox1 == "")
                {
     
                    if (valeur_txtbox2 == "")
                    {
                        //Aucun des deux n'est choisi
                        MessageBox.Show("Veuillez remplir un des deux champs proposés");
                    }
                    else
                    {
                        //Nom produit
                        MySQLDriverCS.MySQLDataAdapter MyAdapter = new MySQLDriverCS.MySQLDataAdapter("SELECT CODE_CIP_PRODUIT, NOM_PRODUIT FROM produit WHERE NOM_PRODUIT = " + valeur_txtbox2, conn);
                        MyAdapter.Fill(ds, "produit");
                        dataGridView1.DataSource = ds.Tables["produit"].DefaultView;
                        /*||||||||||||||*/
                     }
                }
                else
                {
                    //CIP
                    MySQLDriverCS.MySQLDataAdapter MyAdapter = new MySQLDriverCS.MySQLDataAdapter("SELECT CODE_CIP_PRODUIT,NOM_PRODUIT FROM produit WHERE CODE_CIP_PRODUIT = " + valeur_txtbox1, conn);
                    MyAdapter.Fill(ds, "produit");
                    dataGridView1.DataSource = ds.Tables["produit"].DefaultView;
                    /*||||||||||||||*/
                }
     
                conn.Close();
            }
    Comme vous pouvez le remarquer dans ce code, à chaque fois que l'utilisateur va lancer la recherche, le DGV va se vider et mettre )à nouveau le résultat, avant de me casser la tête à coder, j'ai réfléchi a plusieurs solution :

    1. Mettre une boucle jusqu'à ce que un Button (appelons le ARRET) soit enclenché. Mais je pense pas que ca marche
    2. Et je pense que c'est une meilleur solution, mettre cette ligne de code à la place du /*||||||||||||||*/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maDataGrid.SelectedRows(maDatagrid.Rowcount -1)
    Merci pour les éventuelles aides et idées me permettant d'avancer dans mon projet personnel

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    je te conseil de mettre un like a la place de = pour faire une recherche sur un string dans ta bdd.
    de plus (ca ne change pas grand chose, mais c'est plus propre) initialise tes strings a string.Empty et test si ils sont != de string.Empty

    Note: Lorsque tu posts du code met les balises codes et pas citation

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    Salut skunkies,

    Voici l'erreur qu'il me sort (et c'est la même en laissant le = ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MySQLDriverCS Exception : MySQLDriverCS Error : wrong query.You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'premunil' at line 1.
    Sachant que ma recherche a été lero premunil.

    J'ai tenté de mettre un + entre lero et premunil, rien n'y fait. des idées ?
    (merci pour la balise code :p)

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    met le nom de ton produit entre simple quote
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select .* from TBL where produit like 'LE_PRODUIT_RECHERCHE'

  5. #5
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    pour plus d'infos sur le like (in english, mais bon...)
    http://dev.mysql.com/doc/refman/5.0/...-matching.html

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    le problème c'est que le nom du produit se trouve dans un string, d'ou ma requête est de cette forme :

    "SELECT CODE_CIP_PRODUIT, NOM_PRODUIT FROM produit WHERE NOM_PRODUIT = " + valeur_txtbox2

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    désolé pour le double post, mais merci pvialatte, jvais voir ca tout de suite

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    J'aime pas faire des doubles posts mais alors des triples .... Désoulé encore. Bref, j'ai regardé ton lien, c'est assez intéressant. Je tente ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //Définition
                 string valeur_txtbox1="";
                 string valeur_txtbox2="'";
     
                //Ces deux méthodes définis auparavant permettent de retourner la valeur qu'il y a dans la textbox
                valeur_txtbox1 = get_txtbox(textBox1.Text);
                valeur_txtbox2 += get_txtbox(textBox2.Text);
                valeur_txtbox2 += "'";
    Et ca a marché. Donc je vous remercie à vous deux de votre patience et de m'avoir encore une fois aidé.

    Je refais un post avec le code complet pour ceux que ca peut intéresser.

    Passez une bonne fin de journée (même si c'est que le début).

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    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
    private void button1_Click(object sender, EventArgs e)
            {
                //Définition
                 string valeur_txtbox1="";
                 string valeur_txtbox2="'";
     
                //Ces deux méthodes définis auparavant permettent de retourner la valeur qu'il y a dans la textbox
                valeur_txtbox1 = get_txtbox(textBox1.Text);
                valeur_txtbox2 += get_txtbox(textBox2.Text);
                valeur_txtbox2 += "'";
     
                MessageBox.Show("" + valeur_txtbox2);
     
                //Création du Dataset
                DataSet ds = new DataSet();
     
                //Chaine de connexion
                MySQLDriverCS.MySQLConnection conn = new MySQLDriverCS.MySQLConnection(new MySQLDriverCS.MySQLConnectionString("www.lala.com", "bdd", "login", "mdp").AsString);
     
                //Tentative de connexion
                try
                {
                    conn.Open();
                }
                catch (Exception)
                {
                    MessageBox.Show("ERREUR DE CONNEXION !!");
                }
     
                    //Choisir CIP ou Nom du produit ??
                    if (valeur_txtbox1 == "")
                    {
     
                        if (valeur_txtbox2 == "")
                        {
                            //Aucun des deux n'est choisi
                            MessageBox.Show("Veuillez remplir un des deux champs proposés");
                        }
                        else
                        {
                            //Nom produit
                            MySQLDriverCS.MySQLDataAdapter MyAdapter = new MySQLDriverCS.MySQLDataAdapter("SELECT CODE_CIP_PRODUIT, NOM_PRODUIT FROM produit WHERE NOM_PRODUIT like " + valeur_txtbox2, conn);
                            textBox2.Clear();
                            MyAdapter.Fill(ds, "produit");
                            dataGridView1.DataSource = ds.Tables["produit"].DefaultView;
     
                        }
                    }
                    else
                    {
                        //CIP
                        MySQLDriverCS.MySQLDataAdapter MyAdapter = new MySQLDriverCS.MySQLDataAdapter("SELECT CODE_CIP_PRODUIT,NOM_PRODUIT FROM produit WHERE CODE_CIP_PRODUIT = " + valeur_txtbox1, conn);
                        textBox1.Clear();
                        MyAdapter.Fill(ds, "produit");
                        dataGridView1.DataSource = ds.Tables["produit"].DefaultView;
                    }
     
                    conn.Close();
            }
    EDIT : en somme, c'était bien un problème de requêtage

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    justement c'est parceque c'est un string qu'il faut utiliser like '?????' avec éventuellement des joker (_ ou %)

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    Citation Envoyé par skunkies Voir le message
    justement c'est parceque c'est un string qu'il faut utiliser like '?????' avec éventuellement des joker (_ ou %)
    Ouep, je l'ignorais, je le saurais pour la prochaine fois

    EDIT : bon par contre ca ne m'affiche rien dans le DG
    REDIT : arrangé Merci encore

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/09/2013, 10h54
  2. Problème de requête pas optimisée
    Par AlternantOracle dans le forum Requêtes
    Réponses: 2
    Dernier message: 12/01/2012, 11h52
  3. Réponses: 1
    Dernier message: 03/08/2007, 10h09
  4. [Requête]]Problème dans une relation je penses
    Par Mobi362 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 24/03/2007, 18h54
  5. Réponses: 8
    Dernier message: 26/01/2006, 14h47

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