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

Installation Firebird Discussion :

Gerer le format décimal


Sujet :

Installation Firebird

  1. #1
    Membre à l'essai
    Profil pro
    ARTISAN
    Inscrit en
    Février 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : ARTISAN
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2012
    Messages : 17
    Points : 13
    Points
    13
    Par défaut Gerer le format décimal
    bonjour,


    J'ai un petit problème avec des données

    quant j'envois des donnée sur mon serveur il me les stock pas au bon format:

    voici ma base
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    --Table: MATERIAU
     
    --DROP TABLE MATERIAU;
     
    CREATE TABLE MATERIAU (
      ID               INTEGER NOT NULL,
      DESIGNATION      VARCHAR(70),
      UNITE            VARCHAR(3),
      PRIX             DECIMAL(9,3),
      COND             DECIMAL(6,3),
      MARGE            DECIMAL(3,3),
      STOCK_MINI       DECIMAL(9,3),
      FAMILLE          VARCHAR(20),
      PRIX_DE_VENTE    DECIMAL(6,2),
      EMPLACEMENT      VARCHAR(20),
      PRIX_VENTE_FIXE  INTEGER,
      Q_STOCK          DECIMAL(9,3),
      COMMENTAIRE      VARCHAR(200),
      STOCK_MAXI       DECIMAL(9,3),
      GERER_EN_STOCK   INTEGER,
      TEST             NUMERIC(5,1) DEFAULT NULL,
      /* Clés */
      PRIMARY KEY (ID)
    );
     
     
    SET TERM ^ ;
     
    CREATE TRIGGER MATERIAU_BI FOR MATERIAU
    ACTIVE BEFORE INSERT POSITION 0
    AS
    BEGIN
      IF (NEW.ID IS NULL) THEN
      NEW.ID = GEN_ID(GEN_MATERIAU_ID,1);
    END^
     
    SET TERM ; ^
    quant j'envoie "PRIX_DE_VENTE = '1.01'"sur mon serveur il enregistre '1,00999999046326' dans ma base comment puis-je régler le problème?

    d'avance merci!!!

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par vience Voir le message
    ...quant j'envoie "PRIX_DE_VENTE = '1.01'"sur mon serveur il enregistre '1,00999999046326' dans ma base comment puis-je régler le problème?
    Avec quel outil (=programme) insérez vous cette valeur dans la table ?
    C'est là que le problème d'arrondi se trouve, il faudrait utiliser un type de variable dont le type de codage permet d'éviter ce phénomène d'approximation...
    Philippe.

  3. #3
    Membre à l'essai
    Profil pro
    ARTISAN
    Inscrit en
    Février 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : ARTISAN
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2012
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    bonjour,

    merci pour votre reponse

    en effais question idiote répose idiote...

    je travail sur un userfrom sous VBA et en fait j'envois une variable sous ce format : "Replace(CDbl(Box5), ",", ".")" et çà me donne ce résultat citer plus haut...
    en fait j'ai essayer aussi : "Str(Box5)" et j'ai pas prêter attention au résultat qui est bon dans la base de donnée

    je me pose ces questions:

    1)° j'ai dans tout les cas visualiser la requête avant de la valider et il ce trouve qu'elle était bonne => bon les mystères de l'informatique on va dire

    2)° pourquoi firebird ne renvoie pas une erreur ou arrondi la donnée si elle n'est pas conforme au format => DDD.AAA?

  4. #4
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Citation Envoyé par vience Voir le message
    en effais question idiote répose idiote...
    Oh, l'autre !
    Citation Envoyé par vience Voir le message
    j'envois une variable sous ce format : "Replace(CDbl(Box5), ",", ".")"
    Donc, vous transformez la valeur d'une zone de saisie en Double et après vous appliquez un remplacement du signe de séparation décimale ?
    Citation Envoyé par vience Voir le message
    1)° j'ai dans tout les cas visualiser la requête avant de la valider et il ce trouve qu'elle était bonne => bon les mystères de l'informatique on va dire
    Quelle est cette requête ?
    Citation Envoyé par vience Voir le message
    2)° pourquoi firebird ne renvoie pas une erreur ou arrondi la donnée si elle n'est pas conforme au format => DDD.AAA?
    Quelle est la version de Firebird d'ailleurs ?
    Quel SQL Dialect est utilisé ? (1, 3 ?)
    Philippe.

  5. #5
    Membre à l'essai
    Profil pro
    ARTISAN
    Inscrit en
    Février 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : ARTISAN
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2012
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    bonsoir,

    voici ma requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE MATERIAU SET PRIX = '1', MARGE = '1', PRIX_DE_VENTE = ' 1.01' WHERE ID = 1
    et mon ancien code vba :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SQL = "UPDATE MATERIAU "
    SQL = SQL & "SET PRIX = '" & Replace(CDbl(Box5), ",", ".") & "', MARGE = '" & Replace(CDbl(Box6), ",", ".") & "', PRIX_DE_VENTE = '" & Str(Box7) & "' "
    SQL = SQL & "WHERE ID = " & ID_Materiau

  6. #6
    Membre à l'essai
    Profil pro
    ARTISAN
    Inscrit en
    Février 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : ARTISAN
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2012
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    bonsoir,

    voici ma requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE MATERIAU SET PRIX = '1', MARGE = '1', PRIX_DE_VENTE = ' 1.01' WHERE ID = 1
    et mon ancien code vba :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SQL = "UPDATE MATERIAU "
    SQL = SQL & "SET PRIX = '" & Replace(CDbl(Box5), ",", ".") & "', MARGE = '" & Replace(CDbl(Box6), ",", ".") & "', PRIX_DE_VENTE = '" & Str(Box7) & "' "
    SQL = SQL & "WHERE ID = " & ID_Materiau

    ma version fb est 2.5 et
    je sais pas ou trouvez le dialect
    1)° j'ai dans tout les cas visualiser la requête avant de la valider et il ce trouve qu'elle était bonne => bon les mystères de l'informatique on va dire
    j'ai mis çà par ce que j'ai lu quelle que par sur un forum que les programme informatique avais du mal à stocké des nombres à virgule sous un format binaire et je peu comprendre...

    ce que je comprend pas c'est que quand on demande à firebird de stocker
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PRIX_DE_VENTE    DECIMAL(6,2)
    qu'il puisse stocker '1,00999999046326'

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour
    la requête devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE MATERIAU SET PRIX = 1.00, MARGE = 1.00, PRIX_DE_VENTE = 1.01 WHERE ID = 1
    et non des valeurs entre Quotes
    le mieux serait d'utiliser une requête paramétrée (quoique en VBA je ne sache pas comment faire je suis DELPHI(ste))

    mais je pense que le problème essentiel vient des Quotes ,même dans l'ancien code VBA , j'aurais mis ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SQL = "UPDATE MATERIAU "
    SQL = SQL & "SET PRIX = " & REPLACE(CDbl(Box5), ",", ".") & ", MARGE =" & REPLACE(CDbl(Box6), ",", ".") & ", PRIX_DE_VENTE = " & Str(Box7) & " "
    SQL = SQL & "WHERE ID = " & ID_Materiau
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par vience Voir le message
    voici ma requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE MATERIAU SET PRIX = '1', MARGE = '1', PRIX_DE_VENTE = ' 1.01' WHERE ID = 1
    Evitez d'écrire des nombres sous forme de chaines de caractères, cela évitera des conversions de type inutiles...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE MATERIAU SET PRIX = 1, MARGE = 1, PRIX_DE_VENTE = 1.01 WHERE ID = 1
    en vba, cela devrait s'écrire (je virerais les fonctions CDBL et STR qui sont AMHA inutiles):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SQL = "UPDATE MATERIAU "
    SQL = SQL & "SET PRIX = " & Replace(Box5, ",", ".") & ", MARGE = " & Replace(Box6, ",", ".") & ", PRIX_DE_VENTE = " & Replace(Box7, ",", ".") & " "
    SQL = SQL & "WHERE ID = " & ID_Materiau
    Citation Envoyé par vience Voir le message
    ma version fb est 2.5 et
    je sais pas ou trouvez le dialect
    Donc à priori SQL Dialect 3 (cf. FAQ) sauf conversion d'une ancienne base de données.
    Pour en être sur, se connecter à la base de données sous ISQL, puis tapez SHOW SQL DIALECT;
    Citation Envoyé par vience Voir le message
    ce que je comprend pas c'est que quand on demande à firebird de stocker
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PRIX_DE_VENTE    DECIMAL(6,2)
    qu'il puisse stocker '1,00999999046326'
    J'ai effectué différents tests avec FB 2.5.1 et votre table sous Delphi et depuis IbExpert. Je ne reproduis pas ce dysfonctionnement. Je reste sur ma première idée que le problème d'arrondi se situe côté VBA.
    Philippe.

  9. #9
    Membre à l'essai
    Profil pro
    ARTISAN
    Inscrit en
    Février 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : ARTISAN
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2012
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    désoler d'avoir délaisser le forum mais je pense avoir trouvé le disfonctionement

    en faite le résultat qui me posait probleme je le lisais dans ma base avec firebird maestro et je pense que c'est lui qui "lisais" mal le résultat

    du reste je pense que est d'une bonne utilité puise qui change 2,00 en 2.00
    VBA 2.00 c'est du string et en SQL 2.00 c'est du décimal

    dans tout les cas merci pour votre intéret

Discussions similaires

  1. Récupération de résultat sous le format décimal
    Par CREZ59 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 12/07/2006, 12h14
  2. Format décimal dans les fichiers XML
    Par wozzz dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 31/05/2006, 09h18
  3. [Outlook] Gérer le format *.msg d'Outlook
    Par calogerogigante dans le forum Documents
    Réponses: 7
    Dernier message: 16/03/2006, 16h18
  4. Format décimale
    Par priest69 dans le forum Access
    Réponses: 1
    Dernier message: 29/09/2005, 17h49
  5. [Fortran] Format décimal des nombres
    Par bert24 dans le forum Fortran
    Réponses: 4
    Dernier message: 12/05/2005, 17h55

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