OVH Cloud OVH Cloud

trouble format

3 réponses
Avatar
John Smith
Salut,

Ce n'est pas vraiment une question de vb plus une question de access.

Je voudrais enregistrer des valeur dans un champs number (Double) avec du vb
(pour ca ca marche bien) le hic c'Est que je voudrais enregistre une valeur
style 0.00 ou 1.00 etc. Le nombre de décimal peut varier. Access enregistre
seulement 0 ou 1. J'ai enregistrer mes info en format text mais si je fais
une requete sql dans vb et je fais trié les valeur ca ne marche

quelqu'un a une idée!!!
MErci

3 réponses

Avatar
Christian Hugoud
Je pense à une histoire de séparateur décimal : le SQL est très rigide
là-dessus.

Christian


"John Smith" a écrit dans le message de news:
7uVuf.2010$
Salut,

Ce n'est pas vraiment une question de vb plus une question de access.

Je voudrais enregistrer des valeur dans un champs number (Double) avec du
vb (pour ca ca marche bien) le hic c'Est que je voudrais enregistre une
valeur style 0.00 ou 1.00 etc. Le nombre de décimal peut varier. Access
enregistre seulement 0 ou 1. J'ai enregistrer mes info en format text mais
si je fais une requete sql dans vb et je fais trié les valeur ca ne marche

quelqu'un a une idée!!!
MErci




Avatar
John Smith
non je viens de vérifier


"Christian Hugoud" wrote in message
news:
Je pense à une histoire de séparateur décimal : le SQL est très rigide
là-dessus.

Christian


"John Smith" a écrit dans le message de news:
7uVuf.2010$
Salut,

Ce n'est pas vraiment une question de vb plus une question de access.

Je voudrais enregistrer des valeur dans un champs number (Double) avec du
vb (pour ca ca marche bien) le hic c'Est que je voudrais enregistre une
valeur style 0.00 ou 1.00 etc. Le nombre de décimal peut varier. Access
enregistre seulement 0 ou 1. J'ai enregistrer mes info en format text
mais si je fais une requete sql dans vb et je fais trié les valeur ca ne
marche

quelqu'un a une idée!!!
MErci








Avatar
Jean-Marc
"John Smith" a écrit dans le message de
news:7uVuf.2010$
Salut,

Ce n'est pas vraiment une question de vb plus une question de access.

Je voudrais enregistrer des valeur dans un champs number (Double) avec


du vb
(pour ca ca marche bien) le hic c'Est que je voudrais enregistre une


valeur
style 0.00 ou 1.00 etc. Le nombre de décimal peut varier. Access


enregistre
seulement 0 ou 1. J'ai enregistrer mes info en format text mais si je


fais
une requete sql dans vb et je fais trié les valeur ca ne marche




Hello,

erreur classique: tu confonds les 2 notions:
VALEUR et AFFICHAGE de la valeur

Pour Access, dans un champ de type double, la valeur
1 est la même que celle de 1.00 ou que 1.000000000000

Il ne faut pas confondre la valeur stockée et
la représentation que l'on veut en faire.
Soit ta table contenant:

valeur
10
20
23,456
78,455554654

Tu peux tout à fait dans ta requête faire:

SELECT Table1.id, Format$([valeur],"#.000") as ma_valeur FROM Table1;

et tu obtiens:

ma_valeur
10,000
20,000
23,456
78,456

Ceci est ok dans le cas ou tu veux les résulats avec toujours
le même nombre de décimales.

Si tu dois individualiser le nombre de décimales pour chaque
valeur, alors tu as plusieurs solutions.

La meilleure est celle-ci:

stocker tous tes nombres sour une forme entière, dans un champ
de type Long et avoir nu champ de plus qui indique le nombre de
décimales.
=> ceci est une bonne méthode, utilisée par exemple par les banques
pour stocker les taux de conversions des monnaies, ou les montants
des transactions car:
- l'artihmétique sur des Long est EXACTE alors que l'arithmétique
sur les DOUBLE est approchée,
- toutes les monnaies n'ont pas le même nombre de décimales autorisé,
il y a une norme ISO qui définit cela.

Exemple:

tu veux stocker les nombres suivants:
1.000
28.45
78456.1234
12.3

tu vas mettre dans ta table ceci:
valeur posdec
1000 3
2845 2
784561234 4
123 1

et la valeur se calcule dans le select comme étant égale à
valeur / (10 puissance position_decimale) (par exemple):
SELECT Table1.valeur, Table1.posdec, [valeur]/10^[posdec] AS res
FROM Table1;

valeur posdec res
1000 3 1
2845 2 28,45
784561234 4 78456,1234
123 1 12,3

Alors si en plus tu veux un affichage (ne pas confondre
affichage et valeur) personnalisé, tu fais un mélange de
la solution 1 et 2, en ajoutant encore une colonne pour
spécifier le nombre de décimales pour l'affichage:

Table:
valeur posdec decaff
1000 3 3
2845 2 4
78456123 4 1
123 1 2

on veut donc obtenir:
1,000
28,4500
78456,1
12,30

Faisons la requête:

SELECT Table1.valeur, Table1.posdec, Table1.decaff,
Format$([valeur]/10^[posdec],"#." & String$([decaff],"0")) AS Expr1
FROM Table1;

Résulat:

valeur posdec decaff Expr1
1000 3 3 1,000
2845 2 4 28,4500
784561234 4 1 78456,1
123 1 2 12,30


Tout est parfait :-)

Si tu n'aimes pas le stockage sous forme d'entiers, tu peux juste
utiliser la dernière partie, à toi de voir.

Voila en tout cas comment on fait en pratique, dans l'industrie.

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;