CURRENCY : UN TYPE MÉCONNU (MONEY SOUS SQL-SERVER)

PtitJeoJeo Messages postés 85 Date d'inscription mardi 29 janvier 2002 Statut Membre Dernière intervention 18 avril 2005 - 16 juil. 2002 à 16:52
jeuxsimple Messages postés 6 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 20 avril 2008 - 20 avril 2008 à 02:25
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/4046-currency-un-type-meconnu-money-sous-sql-server

jeuxsimple Messages postés 6 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 20 avril 2008
20 avril 2008 à 02:25
merci beaucoup skrol29 c bien marcher .merci de ton aide a+
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
4 janv. 2008 à 11:50
Très pertinent, le conseil est toujours d'actualité !
nourwahiba Messages postés 82 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 23 juin 2011
2 août 2006 à 11:10
bonjour skrol29
merci pour votre reponse et je vais l'essayer immediatement sur mon pc j'esoere que ca va y aller
merci
bonne suite ....
skrol29 Messages postés 114 Date d'inscription vendredi 3 mai 2002 Statut Membre Dernière intervention 17 novembre 2014
30 juil. 2006 à 22:45
Nourwahiba : En VB ou SQL-Serveur le type monétaire se gère de la même manière que toutes les autres valeurs de type numérique. Simplement tu dois faire attention à quelque chose qui est général pour les valeurs numériques : si ton Visual Basic est en français, la conversion passive de numérique en chaîne se fait avec une virgule comme séparateur de décimale. Or celle-ci n'est pas accpetée par SQL-Serveur qui attend un point. Il faut donc faire une conversion explicite de tes montants en utilisant la fonction Format() de Visual Basic.
Exemple :
$SQL = "INSERT INTO ma_table (montant) VALUES (". & Format(montant,"0.0000") & ")"
nourwahiba Messages postés 82 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 23 juin 2011
29 juil. 2006 à 16:15
bonjour
je veux savoir comment faire pour inserer une variable cuurency ( vb) dans une table sql serveur ( champ en money) car quand j'ai essayé d'inserer ma facture( n° facture , ttc) dans ma table sa me pose un probleme
alors quoi faire exactement
cs_gogomanu Messages postés 29 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 26 mars 2009
18 juin 2003 à 13:21
Excellent currency, en regardant dans les docs j'avais pas bien compris à quoi ça servait j'avais l'impression que c'était une sorte de "double" en fait.
Très bon à savoir, je me suis flingué la tête à faire une procédure d'arrondi, ça parait tout con mais j'ai dû la retoucher plusieurs fois!

Public Function Arrondi(Calc As Variant, Optional ByVal ArrondiNombres% 2, Optional ByVal JusteTronquer As Boolean False) As Double
' Arrondi à N chiffres après la virgule (0,003 -> 0,00 0,005 -> 0,01)
' Calc: Nombre à arrondir
' ArrondiNombres: Nombre de chiffres après la virgule
' JusteTronquer: Arrondir en dessous
'
' Optimisation avec un select case pour essayer d'améliorer ce qui est
' facilement améliorable: arrondi 2 est très fréquent par exemple.
'
Dim Decal As Double, Decal2 As Double, Tmp As Double

On Error GoTo Err
Select Case ArrondiNombres
Case 2:
Decal = 100
Decal2 = 0.005
Case 0:
Decal = 1
Decal2 = 0.5
Case 1:
Decal = 10
Decal2 = 0.05
Case 3:
Decal = 1000
Decal2 = 0.0005
Case Else:
Decal = 10 ^ ArrondiNombres
Decal2 = (1 / (Decal + Decal))
End Select
If JusteTronquer Then Decal2 = 0

Tmp = Nz(Calc, 0)
If Decal2 <> 0 Then Tmp = Tmp + Decal2 ' pour ne pas déformer le "Double"
If Decal <> 1 Then Tmp = Tmp * Decal
'*** Je veux garder la partie ENTIERE EXACTE (merci access de daube)
Tmp = Int(Tmp)
If Decal <> 1 Then Tmp = Tmp / Decal
Arrondi = Tmp
'*** La première version paraissait simple: mais bug dans certains cas !!! :
' Arrondi = Int((Nz(Calc, 0) + Decal2) * Decal) / Decal
'********** fin de la première version
Fin:
Exit Function

Err:
MsgBox "Erreur Arrondi: " & vbCr & Err.Number & ": " & Err.Description, vbExclamation
Resume Fin

End Function
skrol29 Messages postés 114 Date d'inscription vendredi 3 mai 2002 Statut Membre Dernière intervention 17 novembre 2014
17 juil. 2002 à 13:28
>Je conseil de travailer en entier long (donc en centimes)

C'est justement comme cela que fonctionne le type Currency.
Il stock le montant sans la virgule, et le gère comme un entier pour les opérations linéaires (somme, multiplication). Mais il restitue la représentation interne divisées 1000 (4 décimales) pour l'affichage et les autres calculs.
Trop fort le Currency.
Sirocooo Messages postés 412 Date d'inscription mercredi 19 décembre 2001 Statut Membre Dernière intervention 7 avril 2008 1
17 juil. 2002 à 11:50
Par expérience je peux dire aujourdh'ui que stocker ses données avec virgule flotante ou fixe source de bugs et d'erreurs.
Quand on développe une grosse appli, un jour ou l'autre ca pete à la figure !!!

Je conseil de travailer en entier long (donc en centimes) c'est beaucoup plus fiable et précis.
à bon entendeur,...
cs_OphidiaN Messages postés 235 Date d'inscription mercredi 4 avril 2001 Statut Membre Dernière intervention 9 novembre 2007
16 juil. 2002 à 18:35
kler, j'avais jamais vu....
PtitJeoJeo Messages postés 85 Date d'inscription mardi 29 janvier 2002 Statut Membre Dernière intervention 18 avril 2005
16 juil. 2002 à 16:52
je retien !
Ptitjeojeo
Rejoignez-nous