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 :

Mysql + Select Wher ComboBox1.Text.Split(" | ")


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Points : 112
    Points
    112
    Par défaut Mysql + Select Wher ComboBox1.Text.Split(" | ")
    Salut....

    voila j'ai un combobox avec 3 valeurs :
    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
    Try
                MysqlConn.Close()
                MysqlConn.Open()
                Dim Query As String
                Query = "select id, name,id_maker, id_types from product ORDER BY name ASC"
                COMMAND = New MySqlCommand(Query, MysqlConn)
                READER = COMMAND.ExecuteReader
                While READER.Read
                    Dim sName = READER.GetString("name")
                    Dim sMaker = READER.GetString("id_maker")
                    Dim sTypes = READER.GetString("id_types")
                    Dim sId = READER.GetString("id")
                    '
                    'ComboBox1.Items.Add(sName)
                    ComboBox1.Items.Add(String.Format("{0} | {1} | {2}", sName, sMaker, sTypes))
     
                End While
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            Finally
                MysqlConn.Dispose()
            End Try
    Comment je fais pour faire un select mysql pour retrouver la valeur du combobox ? J'ai essayer ceci mais sans succes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Str() As String = ComboBox1.Text.Split(" | ")
            COMMAND.CommandText = "select id,name, foto,id_maker,id_types from product where name = '" & Str(0) & "' AND id_maker = '" & Str(1) & "' AND id_types = '" & Str(2) & "'"

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    on repère facilement tes sujets, ils commencent toujours par MySql + xxx

    Bon -sans considérer tes requêtes qui me semblent suspectes - c'est quoi le souci exactement ?
    Ton appel à Split est souligné en rouge ?
    Son retour n'est pas bon ?
    Ta deuxième requête ne renvoie pas les données escomptées ?
    Il y a un plantage (quelle est l'exception et où est-elle levée) ?

    Question subsidiaire : tu fais une requête paramétrée pour ton premier SELECT, pourquoi pas pour le second ?
    Plus je connais de langages, plus j'aime le C.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,

    A priori j'opterais pour :
    Citation Envoyé par jopopmk Voir le message
    Ton appel à Split est souligné en rouge ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Str() As String = ComboBox1.Text.Split('|')
    devrait mieux fonctionner mais il conviendra faire un Trim des chaines retournées.

    Maintenant pour ma part, je ferai une classe du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        public class product
        {
            public string id { get; set; }
            public string name { get; set; }
            public string id_maker { get; set; }
            public string id_types { get; set; }
            public override string ToString()
            {
                return name;
            }
        }
    Puis pour chaque product lu dans la base, j'ajouterais un objet Product dans la ComboBox. Ca serait plus élégant à l'affichage et éviterait un bricolage de Split : A la sélection dans la ComboBox, on récupère directement le product sélectionné.
    Cela pourrait même éviter de refaire une requête SQL pour récupérer les infos de product à condition bien sûr que l'objet product puisse être entièrement monté en mémoire (mais je ne sais pas ce que contient le champ foto).

    ps : Pardon, c'est une classe C# mais facilement adaptable en VB.net

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par jopopmk Voir le message
    Salut,

    on repère facilement tes sujets, ils commencent toujours par MySql + xxx

    Bon -sans considérer tes requêtes qui me semblent suspectes - c'est quoi le souci exactement ?
    Ton appel à Split est souligné en rouge ?
    Son retour n'est pas bon ?
    Ta deuxième requête ne renvoie pas les données escomptées ?
    Il y a un plantage (quelle est l'exception et où est-elle levée) ?

    Question subsidiaire : tu fais une requête paramétrée pour ton premier SELECT, pourquoi pas pour le second ?
    Haha 😂 c'est clair au moiComboBox1.Text.Split(" | ")ns.

    En fait j'ai découvert depuis que si je met "{0}|{1}|{2}" au lieu de "{0} | {1} | {2}" et
    ComboBox1.Text.Split("|") Au lieu de ComboBox1.Text.Split(" | ")
    Donc apparement un probleme dans mon cas c'est un probleme des espaces entre les barres....

    Il renvoi pas la veleur, va savoir ce qu'il quand il y a des espaces. Mais je voudrais savoir pourquoi diable cela marche sans espace et pas avec espace...

    Depuis que je scrute le forum je progresse a toute vitesse et sa fais plaisir d'avoir de l'aide quant on echoue.

    Rien n'est souligner en rouge...

  5. #5
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Citation Envoyé par superthx Voir le message
    [..]Mais je voudrais savoir pourquoi diable cela marche sans espace et pas avec espace...[..]
    ebastien l'explique bien juste au-dessus, il faut penser à "trimer" (enlever les espaces en rab en début et en fin de string) chaque string du tableau renvoyé par Split. Il parle aussi d'une méthode qui consiste à mapper ta ligne dans un objet, qui a deux avantages intéressants :
    - la manipulation de l'objet sera plus simple et évolutif,
    - ça évite des soucis sur les données folklo (là, si un de tes champs contient un pipe ('|', ou 0x7C) ton programme plante gentiment).
    Plus je connais de langages, plus j'aime le C.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par ebastien Voir le message
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Str() As String = ComboBox1.Text.Split('|')
    Pas en rouge.

    Maintenant pour ma part, je ferai une classe du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        public class product
        {
            public string id { get; set; }
            public string name { get; set; }
            public string id_maker { get; set; }
            public string id_types { get; set; }
            public override string ToString()
            {
                return name;
            }
        }
    Puis pour chaque product lu dans la base, j'ajouterais un objet Product dans la ComboBox. Ca serait plus élégant à l'affichage et éviterait un bricolage de Split : A la sélection dans la ComboBox, on récupère directement le product sélectionné.
    Cela pourrait même éviter de refaire une requête SQL pour récupérer les infos de product à condition bien sûr que l'objet product puisse être entièrement monté en mémoire (mais je ne sais pas ce que contient le champ foto).

    ps : Pardon, c'est une classe C# mais facilement adaptable en VB.net
    Je m'explique, avant ma requête faisait appel au nom direct de product. Mais si j'avais 2 produits Voiture, on savait pas lequel prendre directement. D'ou le bricolage de String, de cet façon j'ai dans mon combobox "Voiture | Renault | Megane" pour donner un exemple.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par jopopmk Voir le message
    ebastien l'explique bien juste au-dessus, il faut penser à "trimer" (enlever les espaces en rab en début et en fin de string) chaque string du tableau renvoyé par Split. Il parle aussi d'une méthode qui consiste à mapper ta ligne dans un objet, qui a deux avantages intéressants :
    - la manipulation de l'objet sera plus simple et évolutif,
    - ça évite des soucis sur les données folklo (là, si un de tes champs contient un pipe ('|', ou 0x7C) ton programme plante gentiment).
    Ok si je pige bien le truc d'avant me donne Product mais il intègre tous déjà ?
    Je connais pas trop C et VB. Donc comment je converti ce code en VB ?

  8. #8
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Citation Envoyé par superthx Voir le message
    Ok si je pige bien le truc d'avant me donne Product mais il intègre tous déjà ?
    Je connais pas trop C et VB. Donc comment je converti ce code en VB ?
    Un convertisseur de code C# vers VB.Net : Code Converter

    Le "truc d'avant" te permet en effet de retrouver facilement un Product. L'objet Product intégrera ce que tu lui auras défini comme propriété. Donc éventuellement tous les champs de ta table (il faudra bien-sûr renseigner ces propriétés avec une requête SQL).
    Maintenant attention quand même à la volumétrie. Si tu as un million de produits, ça peut poser problème de les monter en mémoire (ainsi que de les afficher dans une combo d'ailleurs )

    Je comprends ta problèmatique d'affichage lié aux catégories de produit. Tu peux gérer cela facilement avec une classe puisque. lorsque tu insères un objet dans une ComboBox, la Combo appellera la méthode ToString() de l'objet pour afficher son libellé. Il suffit donc d'implémenter correctement cette méthode pour retourner ce que tu veux.

    Soit dit en passant, si tu as une liste de produits avec des catégories de produit puis des modèles (Voiture/Renault/Mégane), tu peux les présenter dans un Control Treeview.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Points : 112
    Points
    112
    Par défaut
    Finalement j'ai opter pour ceci.
    Je sais pas si c'est ce que tu voulais me dire ebastien.

    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
            Dim connetionString As String = Nothing
            Dim connection As MySqlConnection
            Dim command As MySqlCommand
            Dim adapter As New MySqlDataAdapter()
            Dim ds As New DataSet()
            Dim i As Integer = 0
            Dim sql As String = Nothing
            sql = "SELECT id, CONCAT(name,' | ',id_maker,' | ',id_types) AS value FROM product ORDER BY name ASC"
            connection = New MySqlConnection(ConfigurationManager.ConnectionStrings("test.My.MySettings.testConnectionString").ToString)
            Try
                connection.Open()
                command = New MySqlCommand(sql, connection)
                adapter.SelectCommand = command
                adapter.Fill(ds)
                adapter.Dispose()
                command.Dispose()
                connection.Close()
                ComboBox1.DataSource = ds.Tables(0)
                ComboBox1.ValueMember = "id"
                ComboBox1.DisplayMember = "value"
            Catch ex As Exception
                MessageBox.Show("Can not open connection ! ")
            End Try

  10. #10
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Non, je ne pensais pas à ça et c'est vrai que je n'ai pas le reflèxe du Binding à un DataSource en Winform.
    Ca doit aussi fonctionner comme ça, je ne sais pas, je n'ai jamais utilisé. Maintenant encore une fois, ça dépend des données et de l'utilisation que tu feras de ta ComboBox suite à la sélection.

Discussions similaires

  1. Remplacer du texte entre double quotes
    Par brandtance dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 18/02/2017, 03h42
  2. [XL-2003] Export feuille Excel format Text, suppression des quotes
    Par blepy dans le forum Excel
    Réponses: 3
    Dernier message: 08/07/2014, 09h32
  3. Export requete texte -> Excel : erreur quote
    Par Sam 069 dans le forum VBA Access
    Réponses: 1
    Dernier message: 18/07/2007, 15h27
  4. [mysql]SELECTION couple distinct
    Par LE NEINDRE dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/10/2005, 09h32

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