J'ai une base access avec une table ayant une colonne numérique Reel Double
avec 4 chiffres après la virgule.
Les données sont stockées dans la base au format " 24,9999 " (avec virgule).
J'utilise VB2008 Express
Pour faire un tri sur la colonne numérique afin de sélectionner une plage de données entres deux chiffres, c'est a dire entre " 24,9999 " et " 9,9999 ",
j'ai écrit :
Dim X As Double = CDbl(Format(CDbl(24.9999), ("00.0000")))
Dim Y As Double = CDbl(Format(CDbl(9.9999), ("00.0000")))
pour formater le nombre " 24.9999 " et " 9.9999 " au format " 24,9999 " et " "9,9999 " car VB2008 ne reconnait pas le chiffre " 24,9999 " (avec une virgule) comme un numérique voir un Double, mais " 24.9999 " (avec un point) OUI.
Requête
Sql = "SELECT ID, Date_, Code, Article, Total, Sortie, PourCent FROM Partage" _
+ " WHERE PourCent BETWEEN '" & Y & "' AND '" & X & "'" _
+ " ORDER BY PourCent ASC"
La réponse est l'exception : "Type de données incompatible dans l'expression du critère."
j'ai compris que le format de stockage n'est pas compatible avec le format de ma requête
j'ai enlevé la conversion, remplacé Double par Decimal puis par Single, la réponse est toujours la même. Quand je met la colonne a TEXT le tri ne marche pas et ne peut être ordonné.
Quel est le bon format? ou comment reformuler ma requête pour réussir le tri?
Merci d'avance
Tu y trouveras des conseils pour entre autre ne pas utliser de mots clé de VB6 dans VB.Net.
Dim X As Double = CDbl(Format(CDbl(24.9999), ("00.0000")))
Dim Y As Double = CDbl(Format(CDbl(9.9999), ("00.0000")))
pour formater le nombre " 24.9999 " et " 9.9999 " au format " 24,9999 " et " "9,9999 " car VB2008 ne reconnait pas le chiffre " 24,9999 " (avec une virgule) comme un numérique voir un Double, mais " 24.9999 " (avec un point) OUI.
Donc, pour faire des conversions, on utilise la Classe Convert.
Ensuite dans le code, un némrique est toujours écrit avec un point comme séparateur décimal, car en générral en informatique c'est comme ça. Pour autant que je m'en souvienne c'était pareil avec VB6.
Par contre, un texte (string), issu d'un contrôle ou d'un fichier, va subir la politique de conversion que tu lui demandes, si tu ne demandes rien (comme dans ton exemple écrit en VB6....) c'est la politique numérique du PC qui est appliqué, si le symbole décimal est la vrigule alors seuls les textes avec virgules seront convertis, ou l'inverse si le symbole décimal est le point.
Donc pour être capable de te répondre, il faut savoir:
d'ou vient la donnée d'entrée:
contrôle,
fichier,
Base de données, méthode d'extraction
valeur figée dans le code, il me semble assez improbable que dans ton code tu doives juste convertir 24.9999 et 9.99999, mais on ne sait jamais.
ton besoin exact, que veux tu faire de cette virgule? L'afficher quelque part?
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Whismeril
Messages postés19028Date d'inscriptionmardi 11 mars 2003StatutNon membreDernière intervention24 avril 2024656 10 févr. 2016 à 14:47
cs_colby
Messages postés126Date d'inscriptionmardi 10 mai 2005StatutMembreDernière intervention14 novembre 2022
>
Whismeril
Messages postés19028Date d'inscriptionmardi 11 mars 2003StatutNon membreDernière intervention24 avril 2024 10 févr. 2016 à 23:15
Bonsoir Whismeril
Merci pour votre réponse. Voila en quelque sorte la réponse a votre question.
La donnée d'entrée vient d'un contrôle textbox qui affiche le résultat d'un calcul donc elle n'est pas figée.
En fait j'ai deux textbox ( A et B) qui contiennent des données numériques integer non figées. Lorsque la valeur de B est réduite, un calcul de pourcentage est fait et s'affiche dans un troisième textbox (C) au format double.
Dim X as Double
X = Round(CDbl((valeur_B * 100) / valeur_A), 4)
C.Text=Cstr(CDbl(x).Tostring
C'est cette valeur X qui s'affiche dans le texbox C qui est stocké dans la base.
Mon problème est que je voudrais trier ces valeurs en 4 catégories. et les afficher dans un datagridview:
1 Celles supérieures à 70%
2 Celles comprises entre 70% et 50%
3 Celles comprises entre 50% et 25%
4 Celles inférieures à 25%
Whismeril
Messages postés19028Date d'inscriptionmardi 11 mars 2003StatutNon membreDernière intervention24 avril 2024656 11 févr. 2016 à 09:44
Bonjour.
Tout cela n'a aucun rapport avec Access, qui est le titre de ce sujet.
Je t'ai donné un lien, vers un article, que tu n'as forcément pas lu et appliqué puisque tu présentes à nouveau du code vb6.
Enfin je t'ai demandé d'utiliser la coloration syntaxique pour poster du code.
Pas d'efforts de ta part, pas de réponse de la mienne.
Je vous demande d'avance pardon, mais je ne suis qu'un débutant dans le Basic et je n'ai jamais fais du VB6 et ne l'ai même pas. le VB2008 je l'ai télécharger.Tout ce que j’écris je le fais par intuition après beaucoup de lecture et comme j'ai mis OPTION STRICT à ON, c'est VB2008 qui corrige pour moi. Tout ce que je fais j'accepte les corrections et voila.
Pour le lien sur les conversions, si vous pouvez me voir, j'ai passer la nuit a remplacer mes Cstr, CInt, Cdbl et autres, puisque je viens d'encaisser une nouvelle connaissance. Merci pour cela, vous m'aviez déjà aider indirectement.
Pour la coloration syntaxique, j'avoue encore être un ignorant, je ne sais pas comment faire sinon croyez moi c'est avec plaisir que je le ferai.
Merci quand même.
Whismeril
Messages postés19028Date d'inscriptionmardi 11 mars 2003StatutNon membreDernière intervention24 avril 2024656
>
cs_colby
Messages postés126Date d'inscriptionmardi 10 mai 2005StatutMembreDernière intervention14 novembre 2022 11 févr. 2016 à 12:01
Pour la coloarion je t'ai mis le lien vers la procédure plus haut.
cs_colby
Messages postés126Date d'inscriptionmardi 10 mai 2005StatutMembreDernière intervention14 novembre 2022
>
Whismeril
Messages postés19028Date d'inscriptionmardi 11 mars 2003StatutNon membreDernière intervention24 avril 2024 11 févr. 2016 à 12:34
Merci encore cela prouve votre patience.
C'est le résultat affiché dans le textbox MPrCent qui est enregistré dans la base a la colonne numérique PourCent.
Pour extraire en faisant un tri
' pour tous les enregistrement supérieures à 70,0000 Dim X As Double = Convert.ToDouble(Format(Convert.ToDouble(69.9999), ("00.0000"))) Connection() Sql = "SELECT ID, [Date_] as [Date], Code, Article, Total, Sortie, [PourCent] as [% Sortie] FROM Pourcentage" _ + " WHERE PourCent >= '" & X & "' ORDER BY [PourCent] ASC" Cmd = New OleDb.OleDbCommand(Sql) : PrcTA = New OleDb.OleDbDataAdapter(Cmd) Cmd.Connection() = GP CDSet = New DataSet PrcTA.Fill(CDSet, "Pourcentage") PrcT = CDSet.Tables("Pourcentage") Grid.DataMember = "Pourcentage" Grid.DataSource = CDSet
Whismeril
Messages postés19028Date d'inscriptionmardi 11 mars 2003StatutNon membreDernière intervention24 avril 2024656 11 févr. 2016 à 12:13
Cela étant dit.
Il existe des versions plus récentes et gratuites de Visual Studio, Express 2010, 2012, Community 2013 et 2015.
Je te conseille de passer à la plus récente compatible avec ton ordinateur.
Option Strict à On, c'est bien, mais il faut aussi enlever la référence à Visual Basic, c'est écrit dans mon article. Et là plus de Round, Format etc....
Pour faire des arrondis et les fonctions mathématiques en général, on utilise la classe Math, si tu ne sais pas ce qu'est une classe, ça n'est pas la peine d'aller plus loin, il faut commencer par les bases.
Dans mon article il y a un lien vers un très bon cours.
En fait j'ai deux textbox ( A et B) qui contiennent des données numériques integer non figées. Lorsque la valeur de B est réduite, un calcul de pourcentage est fait et s'affiche dans un troisième textbox (C) au format double
Non un textebox affiche du texte, pas des nombres, ce texte peut être la représention d'un nombre, mais là encore c'est la base....
cs_colby
Messages postés126Date d'inscriptionmardi 10 mai 2005StatutMembreDernière intervention14 novembre 2022 11 févr. 2016 à 12:41
Merci
mais c'est en forgeant que l'on devient forgeron.
j'apprends ainsi en côtoyant ceux qui sont expérimentés.
Merci
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211
>
cs_colby
Messages postés126Date d'inscriptionmardi 10 mai 2005StatutMembreDernière intervention14 novembre 2022 Modifié par ucfoutu le 11/02/2016 à 12:49
Bonjour, cs_colby,
Forgeron, je l'ai été par hobby il y a (il fut ?) quelques décennies.
Je te promets que j'ai commencé par apprendre ce qu'étaient le soufflet, le charbon, le foyer, le métal, la température, la malléabilité atteinte, la masse et l'enclume avant même de tenter de commencer à forger.
Et je te promets que le "reste" est ensuite venu assez facilement.
J'avais à l'époque un copain qui, lui, avait une autre approche (à tâtons et sans commencer par là). Il a, lui, abandonné très rapidement de tenter de forger. Il n'en a même plus parlé ....
J'espère que tu comprends la signification de mes propos....
D'abord, round je le répète, c'est du VB6.
Ensuite arrondir un nombre est rarement utile dans les calculs, au moment de l'affichage oui, mais on y reviendra.
Ensuite StotalOut et STotalIn sont déjà des nombres et un Entier en math c'est aussi un Décimal et ben en informatique aussi....
Alors oui
STotalOut * 100 / STotalIn
retourne un entier et donc tronque le résultat.
Une opération qui ne comprends que des entiers retourne un entier, mais il suffit qu'un seul membre soit un décimal pour que le résultat soit décimal.
Donc ça
STotalOut * 100.0 / STotalIn
suffit.
Enfin tu veux afficher le résultat dans un textbox, il faut donc retranscrire en texte.
Tous les objets de VB dérivent de Object et possèdent donc une méthode ToString, qui pour les nombres retourne le texte représentant ce nombre.
MPrCent.Text = PrCent.ToString
va donc afficher le nombre dans le textBox avec la politique par défaut:
point ou virgule dépend de la config du pc
nombre de décimales affichées dépend du résultat 50 => 50.0, 1.9999999 affichera la même chose.
J'ai appris en deux jours plus que je n'en espérais. merci encore
Mais mon problème reste toujours là.
Comment écrire mon SQL pour réussir le tri entre deux valeurs double
Sql = "SELECT ID, [Date_] as [Date], Periode, Code, Article, Total, Sortie, [PourCent] as [% Sortie]" _ + " FROM Pourcentage WHERE PourCent BETWEEN '" & X & "' AND '" & Y & "' ORDER BY [PourCent] DESC"
ou X est la valeur la plus grande et Y la plus petite. je voudrais toutes les valeurs entre les deux.
Je reçois toujours comme réponse l'exception " TYPE DE DONNÉES INCOMPATIBLES DANS L'EXPRESSION DU CRITÈRE "
au risque de me répéter,
La partie base de données, je ne connais pas donc je ne le traiterai pas
Et commence par les bases avant de vouloir décrocher la lune.
Si pour construire une maison tu commences par le toit, quand tu voudras t'attaquer au mur, ça va coincer.
10 févr. 2016 à 14:47
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
10 févr. 2016 à 23:15
Merci pour votre réponse. Voila en quelque sorte la réponse a votre question.
La donnée d'entrée vient d'un contrôle textbox qui affiche le résultat d'un calcul donc elle n'est pas figée.
En fait j'ai deux textbox ( A et B) qui contiennent des données numériques integer non figées. Lorsque la valeur de B est réduite, un calcul de pourcentage est fait et s'affiche dans un troisième textbox (C) au format double.
Dim X as Double
X = Round(CDbl((valeur_B * 100) / valeur_A), 4)
C.Text=Cstr(CDbl(x).Tostring
C'est cette valeur X qui s'affiche dans le texbox C qui est stocké dans la base.
Mon problème est que je voudrais trier ces valeurs en 4 catégories. et les afficher dans un datagridview:
1 Celles supérieures à 70%
2 Celles comprises entre 70% et 50%
3 Celles comprises entre 50% et 25%
4 Celles inférieures à 25%
merci d'avance