Problème d'affichage de données access 2000

ludo782 Messages postés 8 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 21 août 2008 - 27 janv. 2005 à 15:55
madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012 - 1 févr. 2005 à 13:28
je suis étudiant et je dois réaliser une application pour le suivi de
compétences d'élèves. Pour cela, j'ai une bdd avec une table 'Eleves' contenant le nom, le prénom et la classe. Une table 'Evaluer' liée à deux tables 'Niveau1' et 'Niveau2' et à la table 'Etudiant'

Je souhaite afficher les données dans une DataGrid après ouverture d'un recordset avec une requête SQL. voila ma requête:

Dim strSqlEleve As String

strSqlEleve = " SELECT N.nom_eleve, N.prenom_eleve, N.classe_eleve" & _


" FROM Niveau1 N, Eleves E, Evaluer Ev " & _


" WHERE E.classe_eleve = '" & strClasse & "' " & _


" AND E.nom_eleve = '" & strNom & "' " & _


" AND E.prenom_eleve = '" & strPrenom & "' " & _


" AND E.nom_eleve = Ev.nom_eleve" & _


" AND E.prenom_eleve = Ev.prenom_eleve" & _


" AND Ev.nom_eleve = N.nom_eleve" & _


" AND Ev.prenom_eleve = N.prenom_eleve;"

Elle me semble correcte (strNom, strPrenom et strCLasse sont des
variables contenant la sélection de l'élève à afficher) mais au
lancement, j'ai ce message

"Erreur d'éxécution '-2147217904 (80040e10)':

Aucune valeur donnée pour un ou plusieurs des paramètres requis"

et la ligne d'ouverture du recordset est surlignée....

" rs1.Open strSqlEleve, cn "



Je ne comprends pas d'où vient l'erreur

Quelqu'un peut-il m'aider?? Merci

8 réponses

madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012
27 janv. 2005 à 17:12
Est-ce que tu peux récuperer en mode débugage la chaine sql obtenue en mode Execution

et la mettre en ligne ? e



A défaut de l'envoyer tu y verras toi même aussi plus clair...



Change ta requete uniquement le select en faisant un select count (N.nomeleve)... si tu ramène 0 alors faut voire


madbob
0
madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012
27 janv. 2005 à 17:15
Observation après coup :

Le nom n'est pas un identifiant correct pour effectuer des jointures...

madbob
0
Manu94600 Messages postés 107 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 20 février 2008
27 janv. 2005 à 19:50
Je pense pouvoir t'aider, si tu m'etais ton MLD.

Effectivement tu ne doit pas faire ta jointure avec le nom, ni le prenom mais avec l'id_eleve. Tu as de grave problème dans ta requete, les jointures se font entre clé primaire et clé etrangere.

Je te demande de mettre ton MLD (j'espere que tu sais c koi), car dans ta table eleve il doit y avoir un id_eleve (identifiant).
ex MLD: Eleve(Id_eleve, nom_eleve, prenom, #Id_classe)
Classe(Id_classe, Libellé)
La clé primaire est souligné et # signifie que c une clé etrangere
Ici la jointure = Eleve.Id_classe=Classe.Id_classe

Mais je pense pouvoir t'aider, je vien d'obtenir mon BTS IG.

Manu
0
ludo782 Messages postés 8 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 21 août 2008
28 janv. 2005 à 08:54
Effectivement je liais les tables avec le nom et le prénom de l'élève,
j'ai modifié mes tables en ajoutant un id à chaque élève (je pensais
pouvoir laisser le nom et le prénom en tant qu'id en les mettant en clé
primaire). donc j'ai trois tables :

Eleves (num_eleve, nom_eleve, prenom_eleve, classe_eleve)

Niveau1 (num_niveau, 1_1, 1_2, ..... , num_eleve# )

Niveau2 (num_niveau, 1_1, 1_2 , ...., num_eleve# )

1_1, 1_2 ...sont des booléens (compétences) à valider au fur et à
mesure de l'apprentissage, ils vont jusque 5_4 (il y en a 18 pour
chaque niveau)



J'ai modifié mes tables, mon MCD et ma requête sous VB, la requête doit
être mal tapée, j'ai un message d'erreur maintenant m'informant

" Erreur de syntaxe dans la date dans l'expression ' E.classe_eleve '6 A' AND E.nom_eleve 'n6' AND E.prenom_eleve = 'p6' AND E.num_eleve
= N.num_eleve#'.



Je vous mets ma requête parce que je ne vois vraiment pas où il y a
problème sachant que je récupère la classe, le nom et le prénom des
élèves dans trois listBox

strSqlEleve = " SELECT E.nom_eleve, E.prenom_eleve, E.classe_eleve" & _


" FROM Niveau1 N, Eleves E" & _


" WHERE E.classe_eleve = '" & strClasse & "' " & _


" AND E.nom_eleve = '" & strNom & "' " & _


" AND E.prenom_eleve = '" & strPrenom & "' " & _


" AND E.num_eleve = N.num_eleve# ;"



Sinon moi aussi je suis en BTS IG, alors dur les épreuves à passer??

Merci à tous
0

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

Posez votre question
madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012
28 janv. 2005 à 09:29
Bon tu fais comme tu veux mais...



salut,



Simplement si je te conseil de nous envoyer la requête telle que tu l'obtiens à l'execution c'est pas pour t'embêter :


<li>C'est pour, d'une part, t'obliger à utliser le mode débugage </li>
<li>Lire la requete tel qu'elle est exécutée et ainsi te permettre de
te corriger toi même si l'anomalie est évidente mais que tu n'arrive
pas à la voire dans le code</li>

Perso je trouve que le sql écrit de cette façon est plus simple à lire et à maintenir :

strSqlEleve
= " SELECT E.nom_eleve, E.prenom_eleve, E.classe_eleve"

strSqlEleve =
strSqlEleve &
" FROM Niveau1 N, Eleves E"

strSqlEleve =
strSqlEleve &

" WHERE E.classe_eleve = '" & strClasse & "' "

strSqlEleve =
strSqlEleve &
" AND E.nom_eleve = '" & strNom & "' "

strSqlEleve =
strSqlEleve &
" AND E.prenom_eleve = '" & strPrenom & "' "

strSqlEleve =
strSqlEleve &
" AND E.num_eleve = N.num_eleve#"


strSqlEleve =
strSqlEleve &
"
;"




Enfin à la lecture de ta requête le seul truc qui me gêne c'est : c'est
N.num_eleve#


A+
madbob
0
Manu94600 Messages postés 107 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 20 février 2008
28 janv. 2005 à 11:03
Ya pas de probleme si tu travaille.

Pour ta requete premierement à la fin de ta requete tu as un #, c'est une erreur de syntaxe.

Et pour ce qui est de ta jointure je vois pas l'utilité de la table Niveau1. Puisque toutes les info à selectionner sont dans la table eleve.

@+

Manu
0
ludo782 Messages postés 8 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 21 août 2008
1 févr. 2005 à 11:10
Bonjour,



J'ai retravaillé toute la base avec mon professeur, elle fonctionne, ce
qui ne marchait pas auparavant venait du fait que les clefs primaires
ne pouvaient être le nom ou le prénom...

Par contre, je n'ai jamais utilisé le mode 'Débogage' et je ne sais pas
comment afficher la requête par ce mode, mais je serais intéressé de
connaître son fonctionnement.

Sinon, une dernière question, c'est pour l'affichage des booléens dans
la flexgrid (est-ce que c'est possible de les afficher sous forme de
chekbox à l'intérieur de la FG?), sachant que lorsque j'affiche du
texte, je le fais sous la forme
FgNiveau1.textmatrix(0,1) = strNom

Peut on remplacer le .Textmatrix ??



merci beaucoup



Ludo
0
madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012
1 févr. 2005 à 13:28
Content de t'avoir donné la bonne orientation...



Pour ta question concernant le flexgrid, j'en sais rien faut
chercher... Et comme tu le verras chaques objets à ses propres
caractéristiques, faut faire tes courses ;-).



Pour passer en mode debug, c'est vraiment simple : il te le demande
désqu'il y a une erreur (pas boooon :-) ) mais efficace. Il suffit de
dir Oui



Sinon tu positionnes ton curseur dans ton code sur une valorisation de
variable ou un appel de fonction tu appuies sur la touche F9 et un
point d'arrêt va être pris en compte : la ligne passe en surlignage (le
standart est fond rouge sur blanc) avec un point dans la marge...



Ensuite tu lances ton code et dèsque l'exécution atteint le marqueur tu
peux suivre pas à pas l'exécution du prog. Tu selectionne une variable
clic droit ajouter un espion... pour accéder à la variable.



En mode débugage, il y a aussi une fenêtre d'exécution qui permet de
forcer une valeur en particulier... d'agir donc sur le comportement du
programme en cours d'exécution.



Bon débugage

madbob
0
Rejoignez-nous