Vb6

Résolu
pa_omar Messages postés 39 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 28 juin 2005 - 16 juin 2005 à 17:18
pa_omar Messages postés 39 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 28 juin 2005 - 20 juin 2005 à 21:53
Bonjour
j'ai vraimen un probleme avec vb6
quand je specifie ma combo box pour quil maffiche dans des zone de texte des infos à partir du choix de ma combobox il mécri :peut de parametre 1 attendu et pourtant je passe bien ma clause wher si quelqun peut m'aider
Un etudiant

16 réponses

yan35 Messages postés 185 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 20 juin 2013
17 juin 2005 à 00:32
Bonsoir,

Je vois 2 problèmes dans ton code :
- 1° : ton champ Nom de ta table Elève est certainement de type Texte, donc ta syntaxe SQL n'est pas bonne, car le paramètre attendu, représenté par Combo3.text doit être encadré par des quotes, comme suit (corrections en bleu) :
sql = "select * from Eleve,Classe where Eleve.nom= '" & Combo3.Text & "'"
(je sais c'est pas terrible comme syntaxe, mais les param texte doivent être formatés comme ça !)

- 2° : il te manque la jointure entre ta table Elève et ta table Classe, mais je ne peux pas t'aider si tu ne dis pas sur quel champ ces tables sont liées, ni si je ne sais pas si la jointure est interne ou externe. Là ça dépend de la structure de ta base de données.


Cordialement
3
yan35 Messages postés 185 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 20 juin 2013
20 juin 2005 à 14:25
ReBonjour,

Bizarre ! Mais je me rappelle effectivement maintenant qu'avec Access ou VB6 on ne peut pas utiliser de champ calculé dans 1 clause Where, alors dans ce cas, il faudra que tu fasses :

Private Sub Combo3_Click()
Combo3.Visible = False
Text11.Visible = True sql "Select * from Eleve,Classe where (nom & ' ' & prenom) '" & Combo3.Text & "'"
Set rs = db.OpenRecordset(sql, dbOpenDynaset)
While Not rs.EOF
Text11 = rs.Fields("nom")
Text21 = rs.Fields("prenom")
Text31 = rs.Fields("age")
Text41 = rs.Fields("LibelleClasse")
rs.MoveNext
Wend
rs.Close
End Sub

Du coup, on ne reprend pas le champ calculé [nom_prenom] dans les champs du Rs, puisque tu ne t'en sers + ensuite.

Autre chose,
Je ne pense pas que tu ais plusieurs élèves avec le même nom et prénom !
Donc dans ce cas, ta boucle While ne sert à rien, sauf qu'elle alourdit ton programme.
Tu peux directement faire tes mises à jour de tes textbox sans la boucle, puisqu'en principe, si la requête Sql fonctionne, ton Rs n'aura qu'1 enregistrement, tu peux donc t'éliminer 3 lignes de code.

Cordialement
3
yan35 Messages postés 185 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 20 juin 2013
20 juin 2005 à 17:42
Re,

T'as solutions pour mettre à jour tes données, soit :
- tu passes par db.execute mais attention la syntaxe SQL car tu as des champs textes,
- tu fais un Edit et Update de ton Rs, comme suit

Rs.Edit
Rs!nom = text11.txt ' ! ça revient au même que .Fields("nom")
Rs!prenom =text21.txt
.....
Rs.Update

bien sûr, il te faut recréer ton Rs s'il est dans une proc différente, je pense que tu aurais d'ailleurs intérêt à créer ta variable Rs dans la section déclarations de ta form pour qu'il soit permanent dans tes procédures, sinon tu peux toujours le recréer à chaque procédure.

Attention aux valeurs nulles ! Ca crée une erreur dans Update, s'il en trouve !
Donc tu as intérêt à ajouter des tests avant la mise à jour (update) ...

Par Execute, il te faudrait faire attention en + de la syntaxe pour des champs texte au contenu du texte, qu'il ne comporte pas d'apostrophes ou guillemets que tu devrais retraiter.

Cordialement
3
yan35 Messages postés 185 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 20 juin 2013
16 juin 2005 à 19:01
Bonjour,

Tu as probablement 1 problème dans ta syntaxe sql du where, il faudrait en dire + sur ton code !
0

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

Posez votre question
pa_omar Messages postés 39 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 28 juin 2005
16 juin 2005 à 21:13
Ben voila j'ai trois tables classe , eleve et prof
sur ma feuille Form3,j'ai un combobox (combo3) qui affiche tous les noms des eleves et je veux qu'aprés choix d'un nom d'eleve que ses informations lui concernant(nom,prenom,age et classe ) s'affichent dans des zones de textes
Donc voici le code du bouton combo3

Private Sub Combo3_Click()
sql = "select * from Eleve,Classe where Eleve.nom=" & Combo3.Text
Set rs = db.OpenRecordset(sql, dbOpenDynaset)

rs.MoveFirst
While Not rs.EOF
Text11 = rs.Fields("nom")
Text21 = rs.Fields("prenom")
Text31 = rs.Fields("age")
Text41 = rs.Fields("LibelleClasse")
rs.MoveNext
Wend
rs.Close
End Sub
0
pa_omar Messages postés 39 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 28 juin 2005
17 juin 2005 à 01:30
Ben la jointure c'est juste avec la classe ou y'a l'eleve et la table eleve ou classe represente Libelleclasse alor que je lai nommé classe dans la table Classe mais je pense pas que ce soi ca le probleme
si tu ve je peux tenvoyer l'appli par mail pour que tu le voi de plus prés

Un etudiant
0
pa_omar Messages postés 39 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 28 juin 2005
17 juin 2005 à 01:34
Ben au fait c 'etait juste le probleme de syntaxe avec ma clause where merci quand mm
Un etudiant
0
pa_omar Messages postés 39 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 28 juin 2005
17 juin 2005 à 01:56
Maintenant si je veux ajouter le prenom dans la clause where hisoitre de faire :
sql = "select * from Eleve,Classe where Eleve.nom= '" & Combo3.Text & "'" and Eleve.prenom=" je ve mettre quoi là ?"

Un etudiant
0
yan35 Messages postés 185 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 20 juin 2013
17 juin 2005 à 19:50
Salut 290809 pa_omar,

Excuse mon silence, mais je découvre tes messages, aujourd'hui j'étais sur la route et hier soir, j'ai décroché de bonne heure !

Alors tu veux compléter ta clause where par 1 prenom, =>pas de problème, mais ta syntaxe est mal partie.
Rappelles-toi, les guillemets entourent ton sql et les quotes entourent les paramètres texte dans du sql, donc tu dois faire une syntaxe comme suit :

sql = "select * from Eleve,Classe where Eleve.nom= '" & Combo3.Text & "' and Eleve.prenom = '"
& Combo4.text & "'"

J'ai mis Combo4 pour le paramètre prenom mais ça peut être n'importe quoi, une inputBox, par exemple, ou une zone de texte ou 1 variable ....
L'essentiel est de comprendre comment syntaxer ta sql.

J'espère m'être bien expliquer.
Cordialement
0
pa_omar Messages postés 39 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 28 juin 2005
17 juin 2005 à 21:11
Ben merci pour ta reponse , j'ai bien compri la syntaxe là mais c'est pa toujour ce que je veu faire
C'est que c'est dans ma combo3.text qui affichera le nom je ve rajouter le prenom sans me servir dun combobox4 ou dune zone de texte vu que par exple deux eleve peuven avoir le mm nom c'est pour ca que je veu afficher le nom et le prenom dan le Combo3 .J'ai reussi à faire ca mais c la recuperation des mes info qui me pose probleme

Merci
Un etudiant
0
yan35 Messages postés 185 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 20 juin 2013
18 juin 2005 à 12:02
Bonjour,

Dans ce cas, il faut que tu alimentes ta combo avec Nom + prenom si tu veux ensuite faire ta clause where comme définie précédemment.
Je ne sais pas quelle est ton RecordSet d'extraction pour alimenter ta combo, mais il faudrait que tu fasses un truc du style :
"select Nom & ' ' & Prenom As [Nom_Prénom], * from Eleve ...."
le ' ' génère un espace entre nom et prénom
ensuite dans ta clause Where tu compareras à [Nom_Prénom] :
sql = "select * from Eleve,Classe where Eleve.[Nom_Prénom]= '" & Combo3.Text & "'"

Cordialement
0
pa_omar Messages postés 39 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 28 juin 2005
19 juin 2005 à 15:06
BEn ca marche mais pour le combo3 quand je clique ca me marque trop peu de parametre 1 attendu
là je te mets le code de la procedure form_load et celui du combo3

Private Sub Form_Load()
Set db = OpenDatabase(App.Path & "\mabase.mdb")
sql = "select Nom & ' ' & Prenom As nom_prenom from Eleve"

Set rs = db.OpenRecordset(sql, dbOpenSnapshot)
Form3.Combo3.Clear
While Not rs.EOF
Form3.Combo3.AddItem rs.Fields("nom_prenom")
rs.MoveNext
Wend
rs.Close

Form3.Show
Me.Hide

End Sub
______________________________________________________________

Private Sub Combo3_Click()
Combo3.Visible = False
Text11.Visible = True




'Requete Numérotation : ListIndex du Combo1 (0) et Base (1)
sql = "select * from Eleve,Classe where nom_prenom= '" & Combo3.Text & "'"



Set rs = db.OpenRecordset(sql, dbOpenDynaset)

While Not rs.EOF
Text11 = rs.Fields("nom")
Text21 = rs.Fields("prenom")
Text31 = rs.Fields("age")
Text41 = rs.Fields("LibelleClasse")
rs.MoveNext
Wend
rs.Close


End Sub

Un etudiant
0
yan35 Messages postés 185 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 20 juin 2013
20 juin 2005 à 12:15
Bonjour,

C'est normal que ça coïnce si tu ne te sers pas de ton rs d'extraction dans lequel tu as le champ calculé nom_prenom pour faire la comparaison. Tel que tu écris ta comparaison, tu utilises 1 nouveau Rs sans le champ calculé nom_prenom puisque le crée dans tes opérations :
sql = "select * from Eleve,Classe where nom_prenom= '" & Combo3.Text & "'"
Set rs = db.OpenRecordset(sql, dbOpenDynaset)
Donc ton nouveau Rs contient tous les champs de ta table Eleve (*) mais pas nom_prenom, il te faut faire :
sql = "select Nom & ' ' & Prenom As nom_prenom, * from Eleve,Classe where nom_prenom= '" & Combo3.Text & "'"
Set rs = db.OpenRecordset(sql, dbOpenDynaset)
Cordialement
0
pa_omar Messages postés 39 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 28 juin 2005
20 juin 2005 à 13:48
ben franchement merci mais ca a pa changé
revoila le code de ma combo3

Private Sub Combo3_Click()
Combo3.Visible = False
Text11.Visible = True
sql = "select nom & ' ' & prenom As nom_prenom, * from Eleve,Classe where nom_prenom= '" & Combo3.Text & "'"
Set rs = db.OpenRecordset(sql, dbOpenDynaset)
While Not rs.EOF
Text11 = rs.Fields("nom")
Text21 = rs.Fields("prenom")
Text31 = rs.Fields("age")
Text41 = rs.Fields("LibelleClasse")
rs.MoveNext
Wend
rs.CloseEnd Sub

Un etudiant
0
pa_omar Messages postés 39 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 28 juin 2005
20 juin 2005 à 16:36
Ben j'avais pensé à faire comme ta fai là mais je bloquai quelque part
mais là j'ai un bouton modifier et je veux q'une fois le choix de l'eleve fai et que tout ses coordonnées saffichent,que je puisse modifier par exple le nom ou l'age et quand je clique sur le bouton modifier ques ces renseignements soient mis en jour en les enregistrant
Merci

Un etudiant
0
pa_omar Messages postés 39 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 28 juin 2005
20 juin 2005 à 21:53
Merci beaucoup vraiment
Je te suis reconnaissant

Un etudiant
0
Rejoignez-nous