Conditions WHERE dans accés a base de données. [Résolu]

Signaler
Messages postés
5
Date d'inscription
vendredi 13 octobre 2006
Statut
Membre
Dernière intervention
25 juin 2008
-
Messages postés
5
Date d'inscription
vendredi 13 octobre 2006
Statut
Membre
Dernière intervention
25 juin 2008
-
Bonjour à tous,<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>






 






J’ai un souci avec un accès à ma base de données.






 






Je vous place le contexte :






 






BASE DE DONNÉES :





Dans ma base de données, il y a un champ « Texte » et un champ « A » (et d’autres qui ne servent pas ici). C’est une base de donnée crée avec Access, les champs sont paramétrés en « Text ».





Le champ A contient, selon les lignes :





58.75





65.10





77.80





85.75





101.63






 






PROGRAMME :





J’ai une variable « var » qui prend une valeur tapée par l’utilisateur. Elle est de type Single. Elle peut aller de 0 à 200, avec deux chiffres après la virgule.





Une combobox « cmbb » que je souhaite remplir avec le champ « Texte » de la base, conditionné avec la valeur de A correspondante : Je ne veux avoir que les textes correspondants aux A supérieurs à la variable.






 






Voici le code correspondant :






 






Dim
MyConnexion As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & "C:\yo.mdb")






 






Dim
Mycommand As OleDbCommand = MyConnexion.CreateCommand()






 






Mycommand.CommandText = "SELECT Texte FROM BaseDeDonnees WHERE A>='" & CStr(var) & "'"






 






cmbb.Items.Clear()






 






MyConnexion.Open()






 






Dim
myReader As OleDbDataReader = Mycommand.ExecuteReader()






 






Do

While myReader.Read()





cmbb.Items.Add(myReader.GetString(0))





<?xml:namespace prefix st1 ns "urn:schemas-microsoft-com:office:smarttags" /??>
<st1:place w:st="on">
Loop
</st1:place>









 






myReader.Close()





MyConnexion.Close()






 







 







 






Ca marche, dans le sens ou ca ne plante pas…





J’obtiens des résultats incohérents, genre :





Si var= 1, les 5 « Textes » sont ajoutés (normal).





Si var= 2, le texte correspondant au A=101.63 disparaît (??).





Si var= 3, j’ai les textes correspondants aux 58.75 ; 65.10 ; 77.80 ; 85.75





Idem si var= 4 et 5





Si var= 6, j’ai les textes correspondants aux 65.10 ; 77.80 ; 85.75





Si var= 7, j’ai les textes correspondants aux 77.80 ; 85.75






...
 






En analysant les résultats, je comprend que le programme ne compare pas vraiment A avec ma variable, mais uniquement leurs premier chiffre (deux premiers chiffres si ma variable fait 2 chiffres, etc..).






C'est pourquoi le textre correspondant à 101.63 disparait quand var= 2, car le premier chiffre de 101.63 est 1 et il le considère comme ne remplissant pas la condition. Il réapparait quand var= 10 car la variable faisant deux chiffres, il compare maintenant avec deux chiffres.







 






Je n’arrive pas a corriger ce problème, j’ai tenté de mettre les données de la base en « Number », j’ai tenté de remplacer les points par des virgules, et d’autres choses…






 






Désolé si certains détails sont en trop, je vous laisse le plus d’éléments possible.






 






Auriez vous une idée ?






 







 






Merci d’avance.






 






LionHeart

4 réponses

Messages postés
19
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
1 juillet 2010

Salut,
C'est vrai que c'est bizarre
Essai tout de même de faire une requête sql qui effectura la somme de tous tes chiffres a virgule pour voir si le résultat est cohérent  ou pas...
s'il ne l'ai pas le problème est du (je pense) à ta base de donnée et non à ton code.
EXEMPLE DE REQUETE:
select SUM(A) from nom_table;
++
Messages postés
918
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 octobre 2008
10
Résultats totalement cohérent avec le fait que ton champ A est de type Texte !!
en comparaison de type Texte, "2" est supérieur à "101" (car "2" est > à "1", le 1er caractère de la chaine "101").
Le plus simple serait d'avoir un champ A en type numérique
Messages postés
5
Date d'inscription
vendredi 13 octobre 2006
Statut
Membre
Dernière intervention
25 juin 2008

Merci pour vos réponses.

J'ai cependant d'autres problèmes...

J'ai tenté de mettre ce champs de la base en numérique (Single), mais désormais mes requêtes n'aboutissent plus. Le débuggage surligne la ligne
DimmyReader As OleDbDataReader = Mycommand.ExecuteReader().

Quand à la somme, il bug sur la lignecmbb.Items.Add(myReader.GetString(0))<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

Ce sont sûrement des erreurs de syntaxe...




 



Pour le moment j'ai contourné le problème en travaillant avec des textes de longueur indentique, mais j'aimerai bien résoudre ce problème avec le numérique... Déjà pour faire plus propre et ensuite pour comprendre ce qui ne vas pas...
Messages postés
5
Date d'inscription
vendredi 13 octobre 2006
Statut
Membre
Dernière intervention
25 juin 2008

Concernant la somme, j’ai réussit à la faire fonctionner. Il fallait que j’utilise un ExecuteScalar et non un ExecuteReader.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>





Dur dur quand on débute, lol.






 






Donc, la somme est correcte. J’ai testé avec le champ A en Integer, Single, Texte, avec et sans nombres à virgules, avec des nombres qui n’ont pas le même nombre de chiffres, et la somme est toujours bonne.





Je pourrais m’en enchanter mais en fait ça ne fait que m’embrouiller encore plus…






 






Pourquoi est-ce qu’une somme fonctionne si une comparaison ne fonctionne pas ?






 







 






Bref, ma question principale reste celle-ci :





Pourquoi le simple fait de passer mon champ de ‘Texte’ à ‘Single’ (ou ‘Integer’) provoque une erreur à la ligner « ExecuteReader » ?






 







 






Merci pour votre aide, je continue à chercher de mon coté et posterai si ça évolue.