Recuperer la valeur de la clé etrangere

Ursarkar2 Messages postés 13 Date d'inscription vendredi 15 juin 2012 Statut Membre Dernière intervention 5 juillet 2012 - 18 juin 2012 à 12:21
Ursarkar2 Messages postés 13 Date d'inscription vendredi 15 juin 2012 Statut Membre Dernière intervention 5 juillet 2012 - 19 juin 2012 à 11:38
Bonjour

Je reviens vers vous pour un 2ieme problèmes sur lequel je reste bloquer.

Je possède une table qui consiste a associer un contrat a un client. Pour cela je dois donc déclarer l'id du client que je veux associer a l'id du contrat choisi.
Pour les contrats je fais par un combobox comme ca :

MaRequete = "SELECT IdContrats, Libelle_Contrats FROM Contrats order by libelle_contrats asc"
MaCommandeSpecialRequete.CommandText = MaRequete
MonRemplisseur.SelectCommand = MaCommandeSpecialRequete
MonRemplisseur.Fill(MonJeuDeDonnees, "TousLesLibelleContrats")
ComboBoxContr.DataSource = MonJeuDeDonnees.Tables("TousLesLibelleContrats")
ComboBoxContr.DisplayMember = "Libelle_Contrats"
ComboBoxContr.ValueMember = "IdContrats"


Et lors de l'ajout je declare l'id contrat comme cela :
cont = ComboBoxContr.SelectedValue


donc pas de soucis de ce cote. Cependant, je ne peux pas faire de la meme maniere pour les clients a cause notamment des clients qui possedent le meme nom.
J'ai donc fais 2 combobox client.
Un pour le nom et un autre pour le prenom qui se genere en fonction du nom selectione.
Mais le soucis, c'est que je n'arrive pas a recuperer l'id client qui peut etre associers au nom et au prenom du client choisis.

J'ai pensé a faire un combobox special (qui sera pas visible) qui se genere en fonction :

pre = ComboBoxpre.Text
no = ComboBoxCli.Text
MaRequete "SELECT IdClient FROM Clients WHERE nom '" & no & "' and prenom = '" & pre & "' "
MaCommandeSpecialRequete.CommandText = MaRequete
MonRemplisseur.SelectCommand = MaCommandeSpecialRequete
MonRemplisseur.Fill(MonJeuDeDonnees, "LesId")
ComboBoxid.DataSource = MonJeuDeDonnees.Tables("LesId")
ComboBoxid.ValueMember = "IdClient"


Lors du lancement du programme et de l'arrivé sur la page, il y a pas d'erreur.
Si j'ajoute le client sélectionner par défaut, ça marche.
Mais si je change le nom du combobox ou le prénom. Les champs deviennent blanc et du coup je peux plus rien faire.

Donc le problème ne serait pas dans la fonction principal (theoriquement)

donc ca serait soit :
Private Sub ComboBoxCli_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBoxCli.SelectedIndexChanged
Dim no As String
no = ComboBoxCli.Text

MaRequete "SELECT prenom FROM Clients WHERE nom '" & no & "' order by prenom asc"
MaCommandeSpecialRequete.CommandText = MaRequete
MonRemplisseur.SelectCommand = MaCommandeSpecialRequete
MonRemplisseur.Fill(MonJeuDeDonnees, "TousLesPreClients")
ComboBoxpre.DataSource = MonJeuDeDonnees.Tables("TousLesPreClients")
ComboBoxpre.DisplayMember = "prenom"

rafraichir()

MaRequete "SELECT IdClient FROM Clients WHERE nom '" & ComboBoxCli.Text & "' and prenom = '" & ComboBoxpre.Text & "' "
MaCommandeSpecialRequete.CommandText = MaRequete
MonRemplisseur.SelectCommand = MaCommandeSpecialRequete
MonRemplisseur.Fill(MonJeuDeDonnees, "LesId")
ComboBoxid.DataSource = MonJeuDeDonnees.Tables("LesId")
ComboBoxid.ValueMember = "LesId"
rafraichir()


Soit dans le rafraichir()
Dim pre As String
pre = ComboBoxpre.Text
no = ComboBoxCli.Text
MaRequete "SELECT IdClient FROM Clients WHERE nom '" & no & "' and prenom = '" & pre & "' "
MaCommandeSpecialRequete.CommandText = MaRequete
MonRemplisseur.SelectCommand = MaCommandeSpecialRequete
MonJeuDeDonnees.Tables("LesId").Clear()
MonRemplisseur.Fill(MonJeuDeDonnees, "LesId")
ComboBoxid.DataSource = MonJeuDeDonnees.Tables("LesId")
ComboBoxid.ValueMember = "IdClient"


Donc voila, je suis encore une fois en détresse avec ce code. Je m'en remets donc a vous.

1 réponse

Ursarkar2 Messages postés 13 Date d'inscription vendredi 15 juin 2012 Statut Membre Dernière intervention 5 juillet 2012
19 juin 2012 à 11:38
Arf je conçois que c'est pas vraiment clair. Je vais essayé d’être un peu plus précis.

J'ai besoin de récupérer l'id qui est attribué a chaque client en sélectionnant juste leur nom et prénom dans 2 combobox différente.
J'ai deja réussi a faire que le combobox prénom n'affiche que les prénom correspondant aux noms associes. Mais en ce qui concerne la récupération de l'id je suis a moitie bloquer.

Par rapport au code précèdent j'ai un peu progressé.

Ça, c'est dans l’événement load.
MaRequete = "SELECT DISTINCT nom FROM Clients order by nom asc"
MaCommandeSpecialRequete.CommandText = MaRequete
MonRemplisseur.SelectCommand = MaCommandeSpecialRequete
MonRemplisseur.Fill(MonJeuDeDonnees, "TousLesNomsClients")
ComboBoxnom.DataSource = MonJeuDeDonnees.Tables("TousLesNomsClients")
ComboBoxnom.DisplayMember = "Nom"


Private Sub ComboBoxnom_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBoxnom.SelectedIndexChanged
Dim no As String
no = ComboBoxnom.Text
MaRequete "SELECT prenom FROM Clients WHERE nom '" & no & "' order by prenom asc"
MaCommandeSpecialRequete.CommandText = MaRequete
MonRemplisseur.SelectCommand = MaCommandeSpecialRequete
MonRemplisseur.Fill(MonJeuDeDonnees, "TousLesPreClients")
ComboBoxpre.DataSource = MonJeuDeDonnees.Tables("TousLesPreClients")
ComboBoxpre.DisplayMember = "prenom"
rafraichir()
End Sub


Private Sub ComboBoxpre_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBoxpre.SelectedIndexChanged
Dim pre, no As String
no = ComboBoxnom.Text
pre = ComboBoxpre.Text

MaRequete "SELECT idclient, prenom FROM Clients WHERE nom '" & no & "' and prenom = '" & pre & "' "
MaCommandeSpecialRequete.CommandText = MaRequete
MonRemplisseur.SelectCommand = MaCommandeSpecialRequete
MonRemplisseur.Fill(MonJeuDeDonnees, "LesId")
ComboBox1.DataSource = MonJeuDeDonnees.Tables("LesId")
ComboBox1.ValueMember = "idclient"
rafraichir()
End Sub


Private Sub rafraichir()
Dim no, pre As String
no = ComboBoxnom.Text

MaRequete "SELECT prenom FROM Clients WHERE nom '" & no & "' order by prenom asc"
MaCommandeSpecialRequete.CommandText = MaRequete
MonRemplisseur.SelectCommand = MaCommandeSpecialRequete
MonJeuDeDonnees.Tables("TousLesPreClients").Clear()
MonRemplisseur.Fill(MonJeuDeDonnees, "TousLesPreClients")
ComboBoxpre.DataSource = MonJeuDeDonnees.Tables("TousLesPreClients")
ComboBoxpre.DisplayMember = "prenom"

pre = ComboBoxpre.Text
MaRequete "SELECT idclient FROM Clients WHERE nom '" & no & "' and prenom = '" & pre & "'"
MaCommandeSpecialRequete.CommandText = MaRequete
MonRemplisseur.SelectCommand = MaCommandeSpecialRequete
MonJeuDeDonnees.Tables("lesId").Clear()
MonRemplisseur.Fill(MonJeuDeDonnees, "lesId")
ComboBox1.DataSource = MonJeuDeDonnees.Tables("lesId")
ComboBox1.DisplayMember = "idclient"

End Sub


Combobox1 me sert juste de visuel pour voir si il récupère bien la valeur de l'idclient.
Lorsque je sélectionne un nom, l'idclient s'enregistre bien. Mais lorsque plusieurs client ont le même nom, je peux pas changer le prénom. Ça reste bloquer sur le 1ier de la liste.
0
Rejoignez-nous