Requête de comparaison

papiona Messages postés 91 Date d'inscription samedi 18 novembre 2006 Statut Membre Dernière intervention 13 novembre 2009 - 15 oct. 2009 à 04:31
bialain Messages postés 11 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 23 mars 2011 - 18 juil. 2010 à 11:11
Bonjour

j'ai un combobox(sous visual studio 2005) je dois le remplir par les noms & prnoms à partir de ma table ,alors je viens de créer une requête(sous sqlserver 2000) pour concaténer ces 2 champs(noms et prenoms afin de les afficher dans le même combobox),mon problème maintenant c'est que je veux afficher des numero_dossier de ces clients (existe déjà dans le 1ére combo),comment puis-je rédiger cette requête parce que j'ai 2 critére :selecte num_dossier from personne where type_certificat =0 and (?? -- le nom & prenom de la table personne = le nom&prn affichés sur le combo comment je peux effectuer cette comparaison avec la concaténation?
j'attends vos réponse
Merci d'abord

6 réponses

elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 3
15 oct. 2009 à 08:46
Et si tu faisais une classe "Client" avec les champs "Nom", "Prenom", "NumDossier", etc..

Tu re-definis ensuite la méthode (Override) Tostring() de cette classe avec un truc du genre "Return Me.Nom + Me.Prenom"

Tu crées ensuite des objets de tes clients (depuis ta base) avec cette classe, et tu places ces objets dans ta combo.

Du coup le nom et le prenom de tes clients s'affiche dans la combo, et en selectionnant un Item tu es capable à n'importe qu'elle moment de sortir l'objet "Client" selectionné, et donc tout ses attributs (ex : NumDossier).

En esperant avoir été assez claire :-)
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
15 oct. 2009 à 11:23
Salut,

Une seule requête dans ta base :

"SELECT ID, Nom + ' ' + Prenom AS Expr1 FROM personne"

En suite, sers-toi de la propriété ValueMember du combobox:

ComboBox1.DataSource = MaDataTable
ComboBox1.DisplayMember = "Expr1"
ComboBox1.ValueMember = "ID"

Puis pour effectuer une requête dans ta base à partir de ton combo :

SELECT champ1, champ2, champ3... FROM personne WHERE ID='" & ComboBox1.SelectedValue & "'"

Tu peux en suite obtenir les informations désiré sur la ligne en fonction de la personne qui a été sélectionné dans le combo.

Je n'ai pas bien compris si c'est ce que tu cherche à faire, si c'est pas le cas essaye de détailler un peux plus ta demande, c'est pas très claire. Merci.

++

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
papiona Messages postés 91 Date d'inscription samedi 18 novembre 2006 Statut Membre Dernière intervention 13 novembre 2009
15 oct. 2009 à 13:22
Bonjour ,
Je vous remercie pour vos réponse mais ce n'es pas ce que je cherche,ok je vais vous expliquer encore.
Bon j'ai une table dans la base s'appelle "personne",contient les champs : (num_dossier,nom,prenom)

alors dans ma form j'ai rempli un combobox par les noms & prenom ,j'ai concaténer les 2 champs à la fois pour les afficher dans le même combo
voila ma requête :"select nom + ' ' + prenom from personne where tpe_certif = 0"
dans ce cas là j obtenu un combobox contien les nom& prenoms désirés.
aprés je veux remplir un autre combo contien les num_dossier de client sélectionné dans le 1ér combo
donc la requête doit être comme ca " select num_dossier from personne where tpe_certif 0 And (nom & prenom ComboBox1.SelectedValue) ".
mon probléme maintenat c'est comment
commente puis-je comparer le champs nom et le champs prenom de la table personne avec le nom & prenom (concaténé)sélectionné dans le combo

si j'ai 2 combo l'un pr le nom é l'autre pr les prenoms la requete sera trop simple( select num_dossier from personne where tpe_certif = 0 And nom= ComboBox1.SelectedValue and prenom = ComboBox2.SelectedValue ") Maid dans mon cas j'ai 2 champs concaténé dans le même combo
j'espère que c'est claire maintenant
Merci
0
elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 3
15 oct. 2009 à 13:40
Il me semble que ma solution peut répondre à ton probleme.

Je la réexplique de façon plus détaillé donc ...

' Tu crée une classe avec les champs que tu souhaites

Exemple :
---------
Class Client

Private _Prenom As String
Private _Nom As String

Public Property Prenom()
Get
Return _Prenom
End Get
Set(ByVal value)
_Prenom = value
End Set
End Property

' Cette fonction renvoi le texte qui sera affiché dans la Combo
Public Overrides Function ToString() As String
Return Me._Nom + " " + _Prenom
End Function

Public Sub New(ByVal sNom As String, ByVal sPrenom As String)
Me._Nom = sNom
Me._Prenom = sPrenom
End Sub

End Class

------

' Tu crée ensuite tes objets Client, en recuperant les infos de la BDD
Dim MonClient As New Client("DUPOND", "Jean")

' Tu ajoutes l'objet nouvellement crée dans la Combo
ComboBox1.Items.Add(MonClient)

' Du coup "DUPOND Jean" apparait en claire dans la Combo

' Et pour recupérer le Prenom de l'utilisateur il suffit de faire
CType(ComboBox1.SelectedItem, Client).Prenom


Est ce que c'est ce que tu souhaites ? a toi de me dire ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
15 oct. 2009 à 21:48
Bah ya même plus simple encore, se servir du num de dossier (si celui-ci est unique par personne) via le ValueMember, ainsi lors de la sélection dans le combo on récupère directement le N° de dossier sans même envoyer une requête au serveur de données...

Voici un exemple de code :


Private Sub FillCombo()
        ComboBox1.DataSource = Nothing
        ComboBox1.Items.Clear()
        Dim SqlConnex As String = "Ta chaîne de connexion"
        Dim SqlQuery As String "SELECT num_dossier, , Nom + ' ' + Prenom AS Expr1 FROM personne WHERE type_certificat0"
        Dim Connex As New SqlConnection(SqlConnex)
        Dim TableAdapter As New SqlDataAdapter(SqlQuery, Connex)
        Dim Table As New DataTable
        TableAdapter.Fill(Table)
        With ComboBox1
            .DataSource = Table
            .ValueMember = "num_dossier"
            .DisplayMember = "Expr1"
        End With
    End Sub
 
    Private Sub ComboBox1_SelectedIndexChanged( _ 
            ByVal sender As System.Object, _
            ByVal e As System.EventArgs _
            ) Handles ComboBox1.SelectedIndexChanged
        'Tu retrouve ici le numéro de dossier qui a été inséré dans le combo durant la requête précédente
        Label1.Text = ComboBox1.SelectedValue.ToString
    End Sub


Comme précisé plus haut, c'est plus propre et plus rapide car une seule requête est effectué vers la base, lors du remplissage du combo. ValueMember est justement créé dans ce but.

@+ Mayzz.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
bialain Messages postés 11 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 23 mars 2011
18 juil. 2010 à 11:11
Bonjour mes amis.
Moi aussi j'ai un poblème et je veux quelqu'un pour m'aider.
j'ai crée 2 tables "etablissement" et "eleve" et deux combobox "nometabli" et "numeleve". je veux donc remplir le combo_nometabli par les noms d'établissements puis le combo_numeleve par les noms des élèves qui etudient sur l'etablissement sélectionné dans le combo_nometabli.

Comment faire????

N.B: type de ID_etablissement est numérique.
0
Rejoignez-nous