Access et les paramètres régionaux [Résolu]

facdaar 64 Messages postés lundi 24 mars 2003Date d'inscription 23 février 2009 Dernière intervention - 4 nov. 2004 à 12:10 - Dernière réponse : facdaar 64 Messages postés lundi 24 mars 2003Date d'inscription 23 février 2009 Dernière intervention
- 4 nov. 2004 à 18:07
J'ai un problème lors de la mise à jour d'un dataset dans une base access, avec des nombres décimaux. Voilà, quand je configure dans Windows que le symbole des décimales est un point, no problem. Mais si le symbole est une virgule, alors la mise à jour de la base de données ne fonctionne pas [:-(].
Quelqu'un a-t-il une idée ?
J'aimerais ne pas imposer à mes utilisateurs de changer les paramètres Windows !!!

Ci-dessous le code :

[Code]
/// <summary>
/// Update the database with the dataset passed as parameter, then refresh the dataset (if an event handler is connected, it will then be called).
/// </summary>
/// DataSet used to update the DB

/// Data Adapter with which the dataset has been initialized

public void UpdateDataSet(DataSet oDataSet, OleDbDataAdapter oDataAdapter) {
try {
if (oDataSet.HasChanges()) {
OleDbCommandBuilder oCommandBuilder = new OleDbCommandBuilder(oDataAdapter);
oDataAdapter.Update(oDataSet);
// Here we fill the dataset to refresh the identifier value.
oDataAdapter.Fill(oDataSet);
}
}
catch(Exception e) {
Trace.WriteLine("Erreur cDataLayer:UpdateDataSet " + e.Message + " / " + e.Source);
}
}
[\Code]

David.
Afficher la suite 

13 réponses

Répondre au sujet
Arthenius 1183 Messages postés mercredi 21 janvier 2004Date d'inscription 6 septembre 2011 Dernière intervention - 4 nov. 2004 à 14:18
+3
Utile
pb classique...et je crains que tu n'est pas trop le choix....

imposer le point....
ou alors t'amuser a faire une usine qui transforme les ',' en '.'

mais bon ca etre galere...

donc impose...ca ne change pas grand chose pour les users....

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Arthenius
facdaar 64 Messages postés lundi 24 mars 2003Date d'inscription 23 février 2009 Dernière intervention - 4 nov. 2004 à 17:44
+3
Utile
J'ai résolu mon problème. Ok, ce n'est pas très propre, mais désormais, quelquesoit les paramètres régionaux, je peux écrire mon dataset modifié dans Access grâce à ce petit artifice qui fonctionne sous Windows 2000 et XP :

private void CheckRegionalSettings() {
    CultureInfo regional = new CultureInfo(CultureInfo.CurrentCulture.ToString());
    if (regional.NumberFormat.NumberDecimalSeparator != ".") {
        RegistryKey DecimalSeparatorKey = Registry.CurrentUser.CreateSubKey("Control Panel").CreateSubKey("International");
        DecimalSeparatorKey.SetValue("sDecimal", ".");
        Trace.WriteLine("Regional settings modified");
    }
    regional = null;
}



@ +
David.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de facdaar
digital3d 37 Messages postés jeudi 29 juillet 2004Date d'inscription 28 février 2005 Dernière intervention - 4 nov. 2004 à 15:22
0
Utile
Le probleme est que je crains que les utilisateurs qui sont américains, ton programme fera le contraire, elle voudra des , et non des points, donc tu dois tester les paramètres régionaux et ensuite imposer dans tous les cas, le point ou la virgule.
Commenter la réponse de digital3d
Arthenius 1183 Messages postés mercredi 21 janvier 2004Date d'inscription 6 septembre 2011 Dernière intervention - 4 nov. 2004 à 15:24
0
Utile
si tu arrive a imposer "en sous marin" le point dans les parametres regionaux et les restaurer en virgule a la fin de ton appli le code m'interesse...

:o)))

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Commenter la réponse de Arthenius
facdaar 64 Messages postés lundi 24 mars 2003Date d'inscription 23 février 2009 Dernière intervention - 4 nov. 2004 à 15:39
0
Utile
Merci pour vos infos.
Pour l'instant, en effet, je vais imposer le point quelque soit la langue du PC. J'ai fait un essai sur un OS en tchèque, en anglais, et en français, le point fonctionne dans tous les cas.
Autre solution, écrire une commande SQL 'INSERT', plutôt que de mettre à jour mon dataset. Mais cela ne m'arrange pas du tout, pour l'instant.
Commenter la réponse de facdaar
digital3d 37 Messages postés jeudi 29 juillet 2004Date d'inscription 28 février 2005 Dernière intervention - 4 nov. 2004 à 15:42
0
Utile
Pour connaitre quel culture utilise l'utilisateur tu fais ceci:

using System;
using System.Globalization;

namespace RegionalSettings
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
CultureInfo regional = new CultureInfo(CultureInfo.CurrentCulture.ToString());
Console.WriteLine(regional.Name);
Console.ReadLine();

}
}
}
Commenter la réponse de digital3d
digital3d 37 Messages postés jeudi 29 juillet 2004Date d'inscription 28 février 2005 Dernière intervention - 4 nov. 2004 à 15:47
0
Utile
Ajoute même cette ligne pour savoir si c'est un point ou une virgule:

Console.WriteLine("Decimal Separator: {0}",regional.NumberFormat.CurrencyDecimalSeparator);
Commenter la réponse de digital3d
facdaar 64 Messages postés lundi 24 mars 2003Date d'inscription 23 février 2009 Dernière intervention - 4 nov. 2004 à 16:08
0
Utile
D'accord pour voir les paramètres courants, digital3d, et merci. Juste une petite idée : dans l'assembly info, il y a la culture de l'assemebly. Est-ce que je peux me servir de cela pour préciser des paramètres régionaux particuliers à mon assembly ?
Par contre, est que la traduction fonctionnera toujours ?

[assembly: AssemblyCulture("")]


David.
Commenter la réponse de facdaar
digital3d 37 Messages postés jeudi 29 juillet 2004Date d'inscription 28 février 2005 Dernière intervention - 4 nov. 2004 à 16:36
0
Utile
C'est une bonne question qui hélas, je n'ai jamais cherché à savoir. Je pense pas qu'en attribuant toi même ceci:

[assembly: AssemblyCulture("fr-FR")]

Que ton assembly utilisera le français comme paramètres régional mais là encore j'ai un doute, si quelqu'un pouvait répondre.

Merci
Commenter la réponse de digital3d
facdaar 64 Messages postés lundi 24 mars 2003Date d'inscription 23 février 2009 Dernière intervention - 4 nov. 2004 à 17:05
0
Utile
Voici ce que j'ai essayé :
J'ai essayé de changer uniquement les paramètres régionaux pour la thread courante. Bon, ça ne résoud pas mon problème, mais c'était intéressant !

CultureInfo regional = new CultureInfo(CultureInfo.CurrentCulture.ToString());
regional.NumberFormat.CurrencyDecimalSeparator = ".";

System.Threading.Thread.CurrentThread.CurrentCulture = regional;

Commenter la réponse de facdaar
Arthenius 1183 Messages postés mercredi 21 janvier 2004Date d'inscription 6 septembre 2011 Dernière intervention - 4 nov. 2004 à 17:19
0
Utile
je pense utiliser ce bout de code pour tester au demarrage de l'appli si on est en , ou .

si , jettage de l'appli avec message de demande de modification des parametres...
:o)))

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Commenter la réponse de Arthenius
Arthenius 1183 Messages postés mercredi 21 janvier 2004Date d'inscription 6 septembre 2011 Dernière intervention - 4 nov. 2004 à 17:55
0
Utile
tu le froce au . avec ca???

et sur l'application exit ??, tu le remet proprement comme il etait avant???
ou tu laisse le point...

c cool ca peux servir...

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Commenter la réponse de Arthenius
facdaar 64 Messages postés lundi 24 mars 2003Date d'inscription 23 février 2009 Dernière intervention - 4 nov. 2004 à 18:07
0
Utile
Pour être franc, comme j'ai indiqué dans la doc que le point était requis comme le séparateur de décimal, je le laisse forcé comme ça !
Commenter la réponse de facdaar

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.