Vb6

[Résolu]
Signaler
Messages postés
39
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
28 juin 2005
-
Messages postés
39
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
28 juin 2005
-
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

Messages postés
185
Date d'inscription
dimanche 29 juin 2003
Statut
Membre
Dernière intervention
20 juin 2013

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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 82 internautes nous ont dit merci ce mois-ci

Messages postés
185
Date d'inscription
dimanche 29 juin 2003
Statut
Membre
Dernière intervention
20 juin 2013

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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 82 internautes nous ont dit merci ce mois-ci

Messages postés
185
Date d'inscription
dimanche 29 juin 2003
Statut
Membre
Dernière intervention
20 juin 2013

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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 82 internautes nous ont dit merci ce mois-ci

Messages postés
185
Date d'inscription
dimanche 29 juin 2003
Statut
Membre
Dernière intervention
20 juin 2013

Bonjour,

Tu as probablement 1 problème dans ta syntaxe sql du where, il faudrait en dire + sur ton code !
Messages postés
39
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
28 juin 2005

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
Messages postés
39
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
28 juin 2005

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
Messages postés
39
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
28 juin 2005

Ben au fait c 'etait juste le probleme de syntaxe avec ma clause where merci quand mm
Un etudiant
Messages postés
39
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
28 juin 2005

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
Messages postés
185
Date d'inscription
dimanche 29 juin 2003
Statut
Membre
Dernière intervention
20 juin 2013

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
Messages postés
39
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
28 juin 2005

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
Messages postés
185
Date d'inscription
dimanche 29 juin 2003
Statut
Membre
Dernière intervention
20 juin 2013

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
Messages postés
39
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
28 juin 2005

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
Messages postés
185
Date d'inscription
dimanche 29 juin 2003
Statut
Membre
Dernière intervention
20 juin 2013

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
Messages postés
39
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
28 juin 2005

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
Messages postés
39
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
28 juin 2005

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
Messages postés
39
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
28 juin 2005

Merci beaucoup vraiment
Je te suis reconnaissant

Un etudiant