IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

ajout champ en décimal dans table ACCESS


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 171
    Par défaut ajout champ en décimal dans table ACCESS
    Bonjour,

    je cherche désespérément à insérer un champs en décimal dans une table ACCESS, mais la valeur est formatée à l'insertion.

    Code et Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    commande.Parameters.Add(new OleDbParameter("@prix", Convert.ToDecimal(mtbPrix.Text)));
    ma MaskedTextBox mtbPrix a un masque 9,99 ( j'ai essayé avec 9.99 ).

    mon champ prix dans la table est défini comme ceci dans la table.

    Taille du champ : Décimal
    Précision : 18
    échelle : 2
    Décimales : 2

    si j’essaie d'insérer 1,12 la valeur 112 est introduite dans la table.

    Est-ce que c'est ACCESS qui formate la valeur? comment éviter cela?


    Merci ( en espérant ne pas m'être trompé de forum )

  2. #2
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Bonjour,

    J'ai recréer une DB avec une table reprenant un champ du même type que le votre. Effectivement j'ai reproduis l'erreur.

    Le code suivant fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    _dbConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database1.mdb");
     
    try
    {
       _dbConnection.Open();
     
       double dec = 9.99;
       OleDbCommand cmd = new OleDbCommand( "INSERT INTO TABLE1 (DECI) VALUES(@Val1)");
       cmd.Connection = _dbConnection;
       cmd.Parameters.Add("@Val1", OleDbType.Double).Value = dec;
     
       cmd.ExecuteNonQuery();
    }
    catch (Exception ex)
    {
       MessageBox.Show(ex.Message, "Erreur");
    }
    finally
    {
       if (_dbConnection != null && _dbConnection.State == ConnectionState.Open)
       {
           _dbConnection.Close();
           _dbConnection.Dispose();
       }
    }
    Il semblerait qu'utiliser le type décimal en C# provoque le problème contrairement au typedouble.
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 171
    Par défaut
    Bonjour,

    tout en laissant le type decimal dans la table?

  4. #4
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Bonsoir,

    Je n'ai pas touché au schéma de la table, j'ai bien repris celui que vous avez spécifié dans votre post
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 171
    Par défaut
    Bonjour binou76,

    Effectivement cela fonctionne.

    J'avais antérieurement essayer de travailler avec des double, mais là c'est C# qui provoquait des problèmes de précisions au niveau de calculs.

    Il faudrait donc que je trouve plutôt une solution pour travailler de nouveau avec des double alors

  6. #6
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Personnellement quand je travaille avec des nombres avec décimal j'utilise soit les float soit les doubles. Je n'ai jamais utilisé le type décimal.

    Erreur ou non, je n'ai jamais eu de problème pour autant que les types utilisés soit les mêmes.

    Maintenant d'autres membres du forum auront peut-être des explications plus concrètes sur d'éventuels avantages à utiliser le type décimal.
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  7. #7
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    Bonjour,

    Quant au choix decimal ou double, on ne peut pas te donner une réponse, il faut que tu choisisses le type qui correspond le plus à tes besoins. Deux liens intéressants Lien1 et Lien2.

    A toi de voir

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 171
    Par défaut
    Bonjour,

    J'ai toujours travaillé avec des double aussi, mais cette fois-ci j'ai des soucis.

    par cet exemple de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    double montTotal = 0;
     
    for (int i = 0; i < 6; i++) 
    {
         if (!labelMontant[i].Text.Equals(""))
        {
            montTotal = montTotal + 
                             Convert.ToDouble(labelMontant[i].Text.Substring(0, 
                             labelMontant[i].Text.Length - 2));
        }
    }
     
     
    double reste = Convert.ToDouble(lbMontant.Text.Substring(0, 
                        lbMontant.Text.Length - 2));
     
    label4.Text = Convert.ToString(reste - montTotal);
    Seulement les trois premiers éléments sont considérés par la condition suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (!labelMontant[i].Text.Equals(""))
    ce que j'obtiens après la boucle :
    montTotal = 579.99 // ce qui est normal
    reste = 580.00

    mais à l'opération reste - montTotal, je n'obtiens pas 0, 01 mais 0,00999999999999091.

    Une idée de ce que ça peut être?

    Merci

  9. #9
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    avec des decimal tu aurais une meilleure précision

    Reprend tes cours sur la représentation binaire des nombres et fais le calul, tu verras que ça peut être normal

Discussions similaires

  1. Réponses: 0
    Dernier message: 20/03/2015, 12h42
  2. Réponses: 10
    Dernier message: 10/08/2010, 14h29
  3. nombre de champ dans table access
    Par rec82 dans le forum Bases de données
    Réponses: 1
    Dernier message: 27/01/2009, 11h36
  4. Affectation sur un champ vide d'une table Access
    Par kurkaine dans le forum C++Builder
    Réponses: 2
    Dernier message: 25/11/2005, 09h14
  5. Recherche valeur dans table Access
    Par Stefloulou dans le forum Access
    Réponses: 1
    Dernier message: 05/11/2005, 08h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo