Forcer Access en en-US [Résolu]

Signaler
Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
Bonjour,

Je rencontre qq difficultés avec le stockage de nombres flottants dans Access. En effet, je recupère des floats dans des fichiers textes au format anglais (avec un . comme séparateur), puis je les transforme en float dans mon programme en se serveur de float.parse avec une culture en-US.

Problème, quand je veux insérer ces flottants dans Access (que je retransforme en chaine de caractère avec toString() avec un System.Globalization.CultureInfo paramétré en en-US pour créer la requete INSERT INTO), l'insertion plante. Ma base de donnée Access attend des chiffres formattés avec une virgule.

Comment forcer Access à utiliser des flottants en-US? Mon programme doit pouvoir être fiable qq soit le paramétrage de Windows, mettre la "culture" d'Access en anglais corrigerait le problème, mais je n'ai pas trouvé comment faire...

5 réponses

Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
62
Rehello,

datarow.Rows["unfloat"] renvoyera un objet de type float.
Le résultat sera le même que si tu as

float f = 2.5;
f.ToString();

En gros, ça va dépendre des settings local du PC sur lequel est exécuté l'application, sauf si tu le rpécise autrement.
En général, c'est ce qu'on veut. Ca permt à l'utilisateur de travailler avec les format qu'il connnaît, et ça nous permet à nous programmeur de ne pas s'occuper de ces formats.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
62
Hello,

En utilisant desrequêtes paramétrées, tu n'auras pas ce genre de problèmes.
Tu pouras passer des valeur de types float ou DateTime sans passer par des string, et donc sans te soucier de leur format.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
4
Effectivement ca marche en insertion, mais un doute subsiste pour la reception des données, je ne sais pas ce que je vais recuperer dans datarow.Rows["unfloat"].ToString(). Un nombre avec un point ou avec une virgule?
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
Salut,

"datarow.Rows["unfloat"] renvoyera un objet de type float"

Attention !
Ne pas fair confiance aux noms des types entre 2 technos.
Ici, d'après la doc Access, voici la définition du float :
"A double-precision floating-point value with a range of – 1.79769313486232E308 to – 4.94065645841247E-324 for negative values, 4.94065645841247E-324 to 1.79769313486232E308 for positive values, and 0."

Bref, c'est la même chose qu'avec SQL Server : un float Access se bind avec un Double .NET, pas un Single (float).

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
Et à part ça le formatage d'une chaine à partir d'un type float ne dépend pas du SGBD mais de la culture du code .NET en lui même.

/*
coq
MVP Visual C#
CoqBlog
*/