Access et les paramètres régionaux

Résolu
facdaar Messages postés 64 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 23 février 2009 - 4 nov. 2004 à 12:10
facdaar Messages postés 64 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 23 février 2009 - 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.

13 réponses

Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
4 nov. 2004 à 14:18
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..."
3
facdaar Messages postés 64 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 23 février 2009
4 nov. 2004 à 17:44
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.
3
digital3d Messages postés 37 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 28 février 2005 1
4 nov. 2004 à 15:22
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.
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
4 nov. 2004 à 15:24
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..."
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
facdaar Messages postés 64 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 23 février 2009
4 nov. 2004 à 15:39
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.
0
digital3d Messages postés 37 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 28 février 2005 1
4 nov. 2004 à 15:42
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();

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

Console.WriteLine("Decimal Separator: {0}",regional.NumberFormat.CurrencyDecimalSeparator);
0
facdaar Messages postés 64 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 23 février 2009
4 nov. 2004 à 16:08
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.
0
digital3d Messages postés 37 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 28 février 2005 1
4 nov. 2004 à 16:36
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
0
facdaar Messages postés 64 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 23 février 2009
4 nov. 2004 à 17:05
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;

0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
4 nov. 2004 à 17:19
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..."
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
4 nov. 2004 à 17:55
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..."
0
facdaar Messages postés 64 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 23 février 2009
4 nov. 2004 à 18:07
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 !
0
Rejoignez-nous