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

VB.NET Discussion :

Cascade deux combobox à partir de deux tableaux SQL [Débutant]


Sujet :

VB.NET

  1. #21
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2015
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Bonjour

    Merci pour votre Réponse et j'ai compris votre explication , mais lorsque je change
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     '" & C1.SelectedIndex & "'"
    vers voire le message que je trouve lorsque je choisie un client


    Par ce que j'ai déclaré dans la table SQL comme ce dessous

    MErci
    Images attachées Images attachées    

  2. #22
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Avril 2015
    Messages : 52
    Points : 54
    Points
    54
    Par défaut
    Il va te falloir revoir les types de variable que tu assignes à tes variables.De là vient le problème.
    Pour commencer,change la variable client en type text ou varchar.

  3. #23
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Citation Envoyé par Abbé Assy Voir le message
    Dans tes deux tables, y a t-il un élément commun?
    J'ai pour habitude d'utiliser des informations d'une même table.Alors,je vais chercher sur deux tables.
    Il suffit de regarder le shema du post 3

    Citation Envoyé par Abbé Assy Voir le message
    car ce n'est pas l'index qu'il doit choisir mais la valeur (Text) insérée dans C1.
    Faux c'est l'id correspondant à la valeur text

    Citation Envoyé par Abbé Assy Voir le message
    Pour commencer,change la variable client en type text ou varchar.
    Surement pas, la table n'a pas à être modifiée pour adapter au code (client est une cle étrangère de la table travaux)

    Il faut utiliser les requêtes paramétrées. Voir Tuto ou Faq.

    voir du coté de DisplayMember, ValueMember, DataSource. (avec un objet métier ou un dataset)

    Je pense qe la lecture du Cours VB.NET de Philippe Lasserre qui est une mine d'information, très bien pour apprendre, vous sera utile a tous les deux.

    Un exemple : avec objet métier (simplifié)
    La classe représentant un client
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Class client
        Property Id As Integer
        Property Nom As String
        Sub New(UnId As Integer, UnNom As String)
            Id = UnId
            Nom = UnNom
        End Sub
    End Class
    Def de la liste client
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Dim clients As List(Of client) = New List(Of client)
    Alimentation de la combobox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Sub chargeClient()
     
            clients.Add(New client(1, "Paul")) ' remplacer par les éléments lu par la requête sur les clients (qui ramene l'id et le nom)
            clients.Add(New client(2, "Philippe"))
            clients.Add(New client(2, "Louis"))
     
            cboClient.DisplayMember = "Nom"
            cboClient.ValueMember = "Id"
            cboClient.DataSource = clients
     
        End Sub
    visu id du client choisit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        MessageBox.Show(DirectCast(cboClient.SelectedItem, client).Id)
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  4. #24
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Avril 2015
    Messages : 52
    Points : 54
    Points
    54
    Par défaut
    Ok,merci pour l'information.Tout de même,je veuille bien comprendre que tu me dises que mon code n'utilise pas la meilleure manière.Mais de là à me dire que mon code est faux,je ne pense pas que cela soit juste du moment où ce code fonctionne bien chez moi.Pour rappel,j'utilise mysql worbrench.

  5. #25
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Citation Envoyé par Abbé Assy Voir le message
    Ok,merci pour l'information.Tout de même,je veuille bien comprendre que tu me dises que mon code n'utilise pas la meilleure manière.Mais de là à me dire que mon code est faux,je ne pense pas que cela soit juste du moment où ce code fonctionne bien chez moi.Pour rappel,j'utilise mysql worbrench.
    l'id de la table client est de type integer, la clé étrangère du client dans la table travaux est de type integer (mal nommé je le concéde), on ne recherche donc pas le nom dans la table travaux mais l'id. Ce que ne donne pas la propriété text du textbox donc le code que tu donne pour bt-med est faux même s'il fonctionne chez toi parceque le principe qu'il utilise n'est pas le même

    Donc cette ligne de code que tu donne
    Citation Envoyé par Abbé Assy Voir le message
    Ecrit plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    query = "select affaire from traveaux where client = '" & C1.Text & "'"
    car ce n'est pas l'index qu'il doit choisir mais la valeur (Text) insérée dans C1.
    est fause (voir schema table ci joint)

    C'est gentil de vouloir aider mais il faut maîtriser sinon on embrouille son interlocuteur
    Images attachées Images attachées  
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  6. #26
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2015
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Merci "rv26t" pour ton aide , et je sais que il y a une petite erreur , car si je change par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '" & C1.SelectedIndex & "'"
    la combobox de l'affaire fonctionne mais me donne une liste des affaires quelconque , pas suivant la choix de la 1er combobox . Mais je ne sais est ce que mon erreur au niveau de les tables SQL ou au niveau de la code .ainsi si je change par un numéro de l'id de client par exemple je mes '2' , la comobobx N2 de la affaire me donne la liste correcte des affaires suivant la client avec id =2 .

    s'il te plais aider moi quelle est mon erreur pour résoudre cette problème

    et Merci d'avance

  7. #27
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Il ne faut pas utiliser l'index (qui est la position dans la liste) mais adapter le code que je vous ai donné qui fournira l'id client
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  8. #28
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2015
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par rv26t Voir le message
    Il ne faut pas utiliser l'index (qui est la position dans la liste) mais adapter le code que je vous ai donné qui fournira l'id client
    Mr;la travaille dans les tableaux SQL est correcte ou non ? je veux travailler avec l'id de client au lieu de nom de client ,

    sérieusement , je ne sais pas quelle est mon erreur pour adapter le code , prière me idée SVP

  9. #29
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    J'avais quelques urgences à traiter,
    Mais voici le principe
    La classe (allégée) client
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Class client
        Property Id As Integer
        Property Nom As String
        Sub New(UnId As Integer, UnNom As String)
            Id = UnId
            Nom = UnNom
        End Sub
    End Class
    La lecture de la table client, ou l'on récupère l'id et le nom. Grace auquel on construit la liste des clients (id, nom)
    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
        Dim clients As List(Of client) = New List(Of client) ' défini la liste des clients et la cré
        Sub chargeListeClient()
            Using cn As New OleDbConnection("PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=d:\data\personnes\personnes.accdb"), _
                                            cmd As New OleDbCommand("select idclient, client_ste from client", cn)
                Try
                    cn.Open()
                    Using reader As OleDbDataReader = cmd.ExecuteReader()
                        If reader.HasRows Then
                            Do While reader.Read()
                                clients.Add(New client(reader.GetInt32(0), reader.GetString(1))) ' insére un nouveau client à la liste des clients (id et nom)
                            Loop
                        Else
                            MessageBox.Show("aucun client.")
                        End If
                        reader.Close()
                    End Using
                Catch ex As Exception
                    MsgBox(ex.ToString)
                End Try
            End Using
     
        End Sub
    Placer la bonne connexion à la place de "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=d:\data\personnes\personnes.accdb".
    Remplacer les oledb... par les sql... (OleDbConnection, OleDbCommand, OleDbDataReader)

    Lier la liste client à la combobox (dans la classe client nous avons défini les propriété Id et Nom qui représente le client)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Sub SetComboClient()
            cboClient.DisplayMember = "Nom"
            cboClient.ValueMember = "Id"
            cboClient.DataSource = clients
        End Sub
    dans le load
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            chargeListeClient() 'charge la liste
            SetComboClient() 'lien combo - liste
    A la sélection utilisation de l'id
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBox.Show(DirectCast(cboClient.SelectedItem, client).Id) ' donne l'id par rapport client sélectionné
    Sur selection de Nicolas vous avez bien l'id 2

    [Edit] Si vous bloquez montrez le code. (eventuellement indiquez l'erreur s'il y a)
    Images attachées Images attachées  
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  10. #30
    Futur Membre du Club
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Points : 9
    Points
    9
    Par défaut
    Bonjour Mr : Abbé Assy

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    query = "select affaire from traveaux where client = '" & C1.Text & "'"
    Ce code faut il changer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    query = "select affaire from traveaux where client = '" & C1.selectedValue & "'"
    parce que la liaison entre table cliens et affaires c'est IdClient pour faire un filtre, par example :
    le client avec nom Nicolas a un ID=2 et pour afficher les affaire de ce cleint il faut chercher sur Table traveaux dans la colonne Client qu'on 2 pour afficher ses affaires (CD00001/15 ; CD0124/15 ; CD455/14 ; CD758/14 ).
    vola mon code:
    'pour charger la combobox Client
    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
     Private Sub test_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Try
                cXn.Open()
                Dim cmd As New SqlCommand("select IdClient,client_ste from cliens ", cXn)
                Dim da As New SqlDataAdapter(cmd)
                Dim ds As New DataSet
                da.Fill(ds, "t")
                 cmbclient.DataSource = ds.Tables("t")
                cmbclient.DisplayMember = "client_ste "
                cmbclient.ValueMember = "IdClient"
               Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                cXn.Close()
            End Try
     End Sub
    'Une fois qu'un client est selectionné dans combobox1,on affiche la liste de tous ses affaires de ce client dans combobox2.

    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
    Private Sub cmbRegion_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbRegion.SelectedIndexChanged
            Try
            Dim ds2 As New DataSet
               cn.Open()
                Dim cmd2 As New SqlCommand("select IdAffaire,Affaire from trraveaux WHERE Client=" & cmbClient.SelectedValue & "  ", cn)
                Dim da2 As New SqlDataAdapter(cmd2)
                da2.Fill(ds2, "t2")
               CmbAffaire.DataSource = ds2.Tables("t2")
               CmbAffaire.DisplayMember = "Affaire "
                CmbAffaire.ValueMember = "IdAffaire"
             Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                cn.Close()
            End Try
    mais la seul problème que je rencontre c'est il m'affiche ce message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "L'opérateur '&' n'est pas défini pour chaîne "select IdVille,Designation from " et type 'DataRowView"
    Merci de m'aider de corriger cet erreur .

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 5
    Dernier message: 07/11/2013, 11h12
  2. [Débutant] Remplir une ComboBox à partir d'une table SQL (avis sur mon code)
    Par thomas1989 dans le forum C#
    Réponses: 3
    Dernier message: 07/10/2013, 12h38
  3. [Tableaux] créer un tableau à partir de deux autres
    Par spaukensen dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2008, 16h22
  4. Réponses: 1
    Dernier message: 15/03/2008, 20h24
  5. Réponses: 54
    Dernier message: 16/03/2006, 11h42

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