Requête avec critère variable

cs_comme Messages postés 122 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 18 juillet 2009 - 15 janv. 2007 à 16:34
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 - 19 janv. 2007 à 22:08
Bonjour
Veuillez me detecter l'erreur dans mon code qui donne un resultat faux:
j'ai un champ texte dans une table qui peut comporter des nombre ou des lettres ou une valeur nulle ,je veux selectionner seulement les nombres de ce champ compris dans un intervalle variable comme ça:



a=0




b=4
set ado1=adoconnexion.execute ("SELECT  CHM   FROM  Table1  WHERE    isnumeric(CHM) and  CHM>= '" & a & " ' and CHM<= ' " & b & "' ")
j'affiche le resultat de cette requête dans un mshflexgrid  j'obtient  des nombres qui ne répondent pas au critères de la requête   (exp :12 et 18) ,je ne suis pas arrivé à devoiler cette bug  veuillez me donner un coup de main merci .






 

21 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
15 janv. 2007 à 16:41
BIP, le détecteur a trouvé l'erreur !

Normal, en format texte, 0 <=12 <= 4

il te faut faire la sélection sur la première lettre :
set ado1=adoconnexion.execute ("SELECT  CHM   FROM 
Table1  WHERE    isnumeric(CHM) and  Left(CHM, 1) >= '" & a & " ' and
Left(CHM, 1) <= ' " & b & "' ")

A tester...
0
cs_comme Messages postés 122 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 18 juillet 2009
15 janv. 2007 à 22:49
bonsoir mr dark
j'avais eu de bonnes réponses de votre part auparavant,Merci
 Pour ce sujet celà ne marche pas et la requête affiche le nombre 13 qui n'est pas en réalité compris entre 0 et 4 ,et de plus je crois que la fonction left extrait seulement le chiffre des dizaines donc ce chiffre seul est comparé avec 0 et 4 et non le nombre en entier c'est pour celà que le nombre 13 est affiché....merci de revoir ce problème
0
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
16 janv. 2007 à 14:07
Faut surement virer le ' qui encadre les criteres sinon ceux si sont consideré comme texte et comparé ainsi

@+

E.B.
0
cs_comme Messages postés 122 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 18 juillet 2009
16 janv. 2007 à 17:41
bonsoir
Faut surement virer l l'accent ' , si vous permettez essayer d'expliquer plus cette action  -  virer le ' -
0

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

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
16 janv. 2007 à 17:51
SELECT CHM FROM Table1 WHERE isnumeric(CHM) and  Int(CHM) >= " & a & " and Int(CHM)<= " & b

Testé et validé chez moi ;)
0
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
16 janv. 2007 à 20:52
C'est quoi comme type deja CHM ?

E.B.
0
cs_comme Messages postés 122 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 18 juillet 2009
16 janv. 2007 à 20:57
le type chm est dans la table access : un texte  ,parceque ça peut être un nombre ou une lettre ou null ,voir le premier message en haut
0
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
16 janv. 2007 à 21:05
Hum il faudrait testé mais la solution de Dark doit marché sauf... faudrait voir si une valeur null ne fait pas planté Int()

@+

E.B.
0
cs_comme Messages postés 122 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 18 juillet 2009
16 janv. 2007 à 21:12
La méthode de DARK ne marche pas, le message suivant est affiché :"Methode imshflexgrid a echoué " parceque je veux afficher les resultats dans un mshflexgrid.je n'est pas pour le moment de valeur nulle dans la champ mais las valeurs suivantes :3,   v ,    2     ,13    , 15   ,18. : six valeurs pour faire le test
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
16 janv. 2007 à 21:53
bah essaye déjà la requête dans access ou sous vb sans l'attribuer directement dans le mshflexgrid voir si ca passe, car chez moi ca marche (en rajouter un CHM IS NOT NULL dans la requête pour éviter les valeurs nulles), après ca peut être ton mshflexgrid qui est mal configuré (là je peux pas te dire, je n'utilise pas ce contrôle).
0
cs_comme Messages postés 122 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 18 juillet 2009
16 janv. 2007 à 23:21
Bonsoir
Peut importe là où j'affiche le resultat...,j'ai supprimé la valeur chaine de ma table ,en laissant seulment les nombres et en utilisant ta requête avec INT le resultat est : toutes les valeurs du champ et non ceux compris entre 0 et 4
0
cs_comme Messages postés 122 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 18 juillet 2009
18 janv. 2007 à 14:23
Je re pose la question encore , personne à travers le monde n'a pu trouver la solution.
j'ai une table dans access,un champ de type text,contenant des nombres des lettres et des valeurs nulles. une connexion est faites avec access depuis vb 6.0,un recordset executera la requete à critaère variable comme ça:
dim d1 as single,d2 as single: d1=0 :d2=4
set adoselect=adoconnexion.execute("SELECT CHM FROM Table1 WHERE Isnumeric CHM and CHM>='" & d1 & "' and CHM<='" & d2 & "'")
cette requete renvois tous les nombres du champ ('je crois à cause de isnumeric) et non les nombres de l'intervalle [0,4].
0
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
18 janv. 2007 à 14:44
Wow ya des tetus !

E.B.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
18 janv. 2007 à 16:07
Fais voir ta requête avec les INT qui te renvoie tout les nombres, car je le répète : ca marche chez moi, donc y'a aucune raison que ca marche pas chez toi !

IDEM, donne nous un échantillon des valeurs de ta table et ce que la requête te renvoie.

Je ne vois vaiment pas en quoi ma requête peut renvoyer tout les nombres !
0
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
18 janv. 2007 à 16:39
Bah c'est sur.. s'il fait toujours la même requete sans rien ecouter de ce qu'on lui propose ça marchera jamais...

On a déjà dit que ' ' faisait une comparaison de texte par consequent l'utilisation de > et < comme il le concoi est erroné car "100" < "20" et "30" > "2000" etc...

@+

E.B.
0
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
18 janv. 2007 à 16:40
Dark> tu vois ce que je veux dire ?

E.B.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
18 janv. 2007 à 17:12
Tout à fait EB, c'est d'ailleurs l'explication que je lui donne dans mon tout premier message !
0
cs_comme Messages postés 122 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 18 juillet 2009
18 janv. 2007 à 21:38
j'ecoute bien ce que vous dites et voilà tout ce que j'ai:
une table avec un champ CHM contenat les valeurs : null;1;13;2;18
(ici je supprime la lettre parmis les valeurs parceque une erreur survient avec la fonct INT)
Voici ma requete sur le vb :
command1_click()
dim d1 as single,d2 as single: d1=0 :d2=4
set adoselect=adoconnexion.execute("SELECT CHM FROM Table1 WHERE Isnumeric CHM and INT(CHM)>='" & d1 & "' and INT(CHM)<='" & d2 & "'")
RESULTAT de la requête : 1;13;2;18
remarque:
si les valeurs sont comme ça :null;v;1;13;2;18 une erreur se produit.
si cela marche chez toi DARK avec ces donnéés ,je dois revoir autre chose.... merci de la discusion.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
18 janv. 2007 à 21:59
Il faut que tu enlève les quotes sinon tu teste toujours sur des chaînes de caractère et non sur des nombres !

Donc :
set adoselect=adoconnexion.execute("SELECT CHM FROM Table1 WHERE
Isnumeric( CHM) and INT(CHM)>=" & d1 & " and INT(CHM)<="
& d2)
0
cs_comme Messages postés 122 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 18 juillet 2009
19 janv. 2007 à 00:18
BRAVO !
En supprimant le ' (l'accent) tout marche bien,c'est ce qu vous avez dis dans un message précédent alors que ce n'était pas clair pour moi.
maintenat les nulls et les lettres sont ignorés ,c'est ce que veux et j'obtient seule les nombres voulus de ma categorie(entre d1 et d2),et en faisant varier ces bornes j'obtient la catégorie correspondante. mes remerciments.
0
Rejoignez-nous