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

VB.NET Discussion :

SQL + vb , la guerre des décimal


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 17
    Par défaut SQL + vb , la guerre des décimal
    Bonjour, désolé pour le titre, je commence à avoir l'esprit qui chauffe .

    Je suis sur que c'est très très con, mais je ne m'en sors pas. Voilà le souci :

    J'ai une table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /*==============================================================*/
    /* Table : MP                                                   */
    /*==============================================================*/
    create table MP
    (
       CODE_MP              int not null auto_increment,
       CODE_DEVIS           int not null,
       CODE_TYPE_MP         int not null,
       NOM_MP               varchar(50),
       MONTANT_MP           decimal,
       MARGE_MP             decimal,
       primary key (CODE_MP)
    );
    Et je désire faire une requête toute bête avec un petit calcul :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select SUM(MONTANT_MP), SUM(MONTANT_MP * MARGE_MP) from MP where CODE_DEVIS=unentier
    Bref, la requête fonctionne très bien, je l'ai testée soys phpmyadmin.
    Mais avec vb.net, dès que le résultat n'est pas entier, l'affichage est impossible.
    Je suppose que c'est le point "." faisant office de virgule sous mysql qui vient poser problème sous vb.net, sauf que je ne vois pas comment résoudre ce problème.
    Voilà le 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
    20
    Dim totalmpm As Decimal
            Dim totalmpnm As Decimal
     
            Dim cnxmp As MySqlConnection
            cnxmp = New MySqlConnection(M_PAP.cnx)
            cnxmp.Open()
            Dim cmdmp As MySqlCommand
            cmdmp = cnxmp.CreateCommand()
            cmdmp.CommandText = "select SUM(MONTANT_MP), SUM(MONTANT_MP * MARGE_MP) from MP where CODE_DEVIS=" & M_PAP.codedevis & ""
            Dim drmp As MySqlDataReader
            drmp = cmdmp.ExecuteReader()
            drmp.Read()
     
            totalmpnm = drmp.GetValue(0)
            totalmpm = drmp.GetValue(1)
     
            cnxmp.Close()
     
            T_MP_Non.Text = totalmpnm
            T_MP_oui.Text = totalmpm
    Si "totalmpnm" et "totalmpm" sont entier, aucun souci, ils s'affichent dans les textbox.
    En revanche si l'un des deux comporte un ".", c'est à dire n'est pas entier, alors plus rien ne fonctionne.

    Une idée pour régler ce problème ?

    Merci d'avance

  2. #2
    Membre émérite Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Replace(Tadonnée, ",", ".")

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 17
    Par défaut
    Merci d'essayer de m'aider, mais sans vouloir être désagréable, je ne pense pas que tu ais lu le sujet.

    Je vais chercher des décimal dans la base, ils sont donc stocké avec des "." en guise de séparateur.

    Et tu me propose de remplacer des virgules (qui n'existent nulle part) par des points (qui sont déjà là et qui apparemment sont justement la source du problème), le tout dans une chaîne alors que ma valeur est numérique.

    Merci quand même.

    D'autres idées ?

  4. #4
    Membre émérite Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Par défaut
    Pour ton information, vb travaille avec des points dans ses chiffres, et non avec des virgules.

    De plus si j'ai mis un string, c'était juste pour illustrer.

    Cependant, le problème ne venant d'après moi pas du".", tu devrais peut-être essayer de travailler avec des "Double" ou des "Single" tout dépend le nombre de chiffres que tu utilise.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /*==============================================================*/
    /* Table : MP                                                   */
    /*==============================================================*/
    create table MP
    (
       CODE_MP              int not null auto_increment,
       CODE_DEVIS           int not null,
       CODE_TYPE_MP         int not null,
       NOM_MP               varchar(50),
       MONTANT_MP           Double,
       MARGE_MP             Double,
       primary key (CODE_MP)
    );
    PS : en même temps je n'ai jamais travaillé avec le format "Decimal".

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 17
    Par défaut
    Pour ton information, vb travaille avec des points dans ses chiffres, et non avec des virgules.
    Je sais, et je n'ai jamais dis le contraire. Nulle part que ce soit dans mySQL ou dans mes saisies, ou mon code, il n'y a de virgules, c'est pour cela que je m'étonnais du fait que tu me demande de remplacer des virgules --> ya pas de virgules à remplacer.


    Je vais tester avec des Double, si jamais je peux contourner le problème comme ça, ça sera déjà très bien.

    Merci

  6. #6
    Membre émérite Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Par défaut
    Je sais, et je n'ai jamais dis le contraire. Nulle part que ce soit dans mySQL ou dans mes saisies, ou mon code, il n'y a de virgules, c'est pour cela que je m'étonnais du fait que tu me demande de remplacer des virgules --> ya pas de virgules à remplacer.
    J'avais juste lu ton post un peu vite, je dois l'admettre

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 17
    Par défaut
    Hop, je viens de tester avec Double, Float, etc ..

    Rien n'y fais cela a bien l'air de venir de ce foutu "."

    Au final, pour avoir toutes les données du problème :

    Les 2 résultats de la requête sont :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUM(MONTANT_MP) <--- 191
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUM(MONTANT_MP * MARGE_MP) <--- 286.5
    Donc mon code fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    totalmpnm = 191
            totalmpm = 286.5
    J'ai demandé à des msgbox d'afficher à ce moment les deux valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    totalmpnm = drmp.GetValue(0)
            MsgBox(totalmpnm, MsgBoxStyle.OkOnly, "!!!!!!!!")
            totalmpm = drmp.GetValue(1)
            MsgBox(totalmpm, MsgBoxStyle.OkOnly, "!!!!!!!!")
    la première s'affiche bien, pour ce qui est de la seconde, la msgBox n'apparaît même pas.

    Le problème semble donc bien venir du point.

    Des idées ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL server] Comment Fusionner des données dans une requête
    Par MoTUmBo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2005, 15h24
  2. Réponses: 5
    Dernier message: 13/07/2005, 10h03
  3. SQL 2000 - Liste + taille des tables et index
    Par Fox dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/03/2004, 15h59
  4. Requete avec des décimales
    Par Sandrine75 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 27/06/2003, 10h18
  5. Réponses: 1
    Dernier message: 06/03/2003, 11h57

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