Requête avecl'instruction count

cs_comme Messages postés 122 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 18 juillet 2009 - 13 janv. 2007 à 00:38
cs_comme Messages postés 122 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 18 juillet 2009 - 13 janv. 2007 à 16:47
hello
j'utilise une requete selection  pour faire des categories d'eleves d'une classe,le critere est :
notes de 0 à 4, de 4.01 à 7.99 ,de 8 à 11.99,de 12 à 20.
ces bords d'itervalles sont saisis dans une table  à deux colonnes(Debut et Fin)
je lie cette table à  l'aide un recordset appelé : adointervalle et j'utilise la requéte selection à l'aide d'un autre recordset appelé :adoselect le tout est comme ça :
--------------------------------
dim d1 as single,d2 as single
adointervalle.movefirst

for  i=1 to 4         'quatre intervalles
d1=adointervalle.fields(0)             ' ici je charge la premiere valeur de l'intervalle
d2=adointervalle.fields(1)             ' la deuxieme
set adoselect=adoconnexion.execute("SELECT count(F1) FROM Table1 WHERE  F1<='" & d2 & "'  and  F2>='" & d2 & "'")
adointervalle movenext
next  i
F1 represente la colonne dans table1 qui contient les notes.
Pour ne pas trop ecrire ,,,dans chaque boucle je memorise la valeur de adoselect.fields(0) pour remplir un tableau de categories .
voici mon problème :
cette requête me donne des valeurs fausses c a d  le nombre dans la categorie est faut , mais si  remplace d1 et d2 par des valeurs numeriques celà sort juste, mais avec d1 et d2 variables celà ne marche plus. y a t il une erreur dans cette requête ou dans cette boucle? merci

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
13 janv. 2007 à 05:39
Salut
J'ai pas tout compris dans tes variables (...), mais ceci semble incorrect :
("SELECT count(F1) FROM Table1 WHERE  F1<='" & d2 & "'  and  F2>='" & d2 & "'")
Je pense qu'il faut comparer deux fois F1 (et pas F2) avec d1 et d2 (et pas deux fois d2).
+ Vérifie le sens des <= et >= : ils semblent à l'envers.
D'autre part, si d1 et d2 sont des champs numériques dans ta DB, il ne faut pas les encadrer par des '
Ce qui donnerait :
("SELECT count(F1) FROM Table1 WHERE F1 >= " & d1 & " and F1 <= " & d2)
ou encore
("SELECT count(F1) FROM Table1 WHERE F1 between " & d1 & " and " & d2)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_comme Messages postés 122 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 18 juillet 2009
13 janv. 2007 à 16:47
Bonsoir
Mr jack :le F2 est une faute de frappe comme vous avez remarqué.
j'ai appliqué tes instructions et le nombre dans la catégorie n'est plus correcte.
je m'explique plus:
mon recordset (adointervalle ) parcours une table à 2 chaps: dans cette table il y a 4 enregistrements (les catégories) comme ça:
(0 et 3.99), (4 et 7.99) , (8 et 11.99),(12 et 20) ce recodset adointervalle parcours cette table est charge la variable d1 par la première valeur et d2 par la deuxieme(avant qu'il movenext dans la boucle). la requête consiste à chercher à chaque fois (dans une boucle) le nombre d'eleves dans chaque catégorie( exemple: categorie 0 3.99) pour cela j'ai une table appelée table1 contenant le champ des notes appelé F1.et la requete :
set adoselect=adoconnexion.execute("SELECT count(F1) FROM Table1 WHERE F1>='" & d2 & "' and F1<='" & d2 & "'") me donne des valeurs fausses.
quand je met un point d'arret pour verifier la valeur de adoselect.fields(0) je trouve le nombre 3 dans la categorie (0 3.99) alors que je n'ai qu'un seule eleve qui a la note 2/20 . et d'autres eleves ont des notes entre 4 et 7.99 alors que ma requete renvoit zéro pour cette categorie.
l'instruction betwween donne les mêmes erreurs merci mr jack
0
Rejoignez-nous