Saisie semi-automatique avec combobox et accées à bdd. NE FONCTIONNE PAS!

Signaler
Messages postés
156
Date d'inscription
lundi 13 novembre 2000
Statut
Membre
Dernière intervention
18 septembre 2006
-
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
-
Bonjour/Bonsoir.
J'ai un problème qui commence à me prendre la tête.
Je veux réaliser une saisie semi-automatique (comme dans la barre d'url de firefox par ex).
Je possède une bdd avec une table "Adresse" et un champ "nom_patient"
Lorsque l'utilisateur tape une lettre, la ComboBox doit se remplir avec la liste des "nom_patient" commencant par cette lettre. Et si il tape une seconde lettre, elle doit se juxtaposer à la première, la ComboBox se vider pour se reremplir avec les "nom_patient" dont les deux premières lettres coincident avec celle qui ont étées saisies.

Mon (ébauche de) code:

Private Sub Combo1_KeyPress(KeyAscii As Integer)
sql1 = "select * from Adresse where nom_patient like '" & Combo1.Text & "*'"
Set rs1 = db.OpenRecordset(sql1, dbOpenDynaset)
While Not rs1.EOF
Combo1.AddItem rs1.Fields("nom_patient")
rs1.MoveNext
Wend
rs1.Close

End Sub

Le premier problème vient que ma requête SQL donne un recordset qui contient TOUS les champs de la table! J'ai bien fouillé partout pour la syntaxe et je n'arrive pas à selectionnner les champs commencant par la lettre A par exemple.
Pourtant quand j'execute directement sur ma bdd la requete:
select * from Adresse where nom_patient like 'a*'
j'obtiens le résultat escompté. Je n'y comprend plus rien, où est mon erreur svp?

Pour ceux qui auront eu le courage de lire jusque là, j'ai un deuxième souci:
je n'arrive pas à saisir plus d'une lettre, la frappe suivante au clavier vient remplacer la précedente...

J'espere avoir été clair. Je remercie d'avance ceux qui voudront bien me donner un coup de pouce. A bientôt (ah oui, c'est urgent.. ;-)

guillaume

5 réponses

Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
18
Salut,
Et si tu mets ton code dans le change au lieu du keypress, ce n'est pas mieux ?
J'explique, dans le keypress, le Combo1.Text n'a pas encore pris en compte la lettre tapée.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
Messages postés
156
Date d'inscription
lundi 13 novembre 2000
Statut
Membre
Dernière intervention
18 septembre 2006

Merci pour le conseil, je travaille maintenant avec la Sub Combo1_Change.

Mais je ne m'explique toujours pas le problème de la requête SQL, quelq'un peut-il m'aider?

A bientôt.



guillaume
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
18
A mon avis, la requete n'est pas en cause.
Essaie de mettre un combo1.clear avant le While Not rs1.EOF. Cela aura pour effet de vider la combo avant de re-remplir.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
Messages postés
156
Date d'inscription
lundi 13 novembre 2000
Statut
Membre
Dernière intervention
18 septembre 2006

"A mon avis, la requete n'est pas en cause."

Tu veux dire que la requ^te est bien formulée? Dans ce cas, je ne suis
que plus desesperé! Car le recordset qui lui est lié prend tous les
champs de ma table et non pas les champs commencant par la ou les
lettres tapées...

Merci quand-même pour ton aide. Si quelqu'un est de passage sur ce post
et qu'il a une peitite idée sur la question, n'hésite pas, je répondrai.

guillaume.
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
18
Aie, dernier essai, met un point d'arrêt sur sql1 = "select...... et vérifie la valeur de Combo1.Text.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?