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

SQL Firebird Discussion :

Integer overflow avec un champs calculé


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Par défaut Integer overflow avec un champs calculé
    Bonjour,

    J'utilise la version 2.1 de Firebird (WI-V2.1.2.18118).J'en suis au développement, il n'y a aucune production. Donc pas de problème pour trafiquer la base.

    J'essaie de faire quelques calculs sur la TVA.
    Seulement, il me met l'erreur ci-dessous. J'ai donc essayé de découper la requête pour tester la partie qui pose problème (normalement, il n'y a pas d'union).

    Si j'enlève " * (1 - (REMISE_EN_POURCENT_TOTALE / 100))", la requête fonctionne :


    Et si je le remplace par " * 0.99"


    ISC ERROR CODE:335544779

    ISC ERROR MESSAGE:
    Integer overflow. The result of an integer operation caused the most significant bit of the result to carry.

    STATEMENT:
    TIBOInternalDataset: "<TApplication>.frmMain.dlgWisql.<TIBOQuery>.<TIBOInternalDat
    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
     SELECT (SUM(TVA1) * (1 - (REMISE_EN_POURCENT_TOTALE / 100))) as TVA1, TAUX, DESCRIPTION
     FROM (
     SELECT SUM((LIGNE_COMMANDE.PU_HT * LIGNE_COMMANDE.QUANTITE - Ligne_Commande.Remise  - (Ligne_Commande.PU_HT / 100 * Ligne_Commande.Quantite * Ligne_Commande.Remise_en_pourcent)) * (TVA.TAUX / 100)) as TVA1, TVA.DESCRIPTION, TVA.TAUX, COMMANDE.REMISE_EN_POURCENT_TOTALE
     FROM LIGNE_COMMANDE
     JOIN TVA on TVA.NUMERO_TVA=LIGNE_COMMANDE.NUMERO_TVA
     JOIN Commande ON Commande.NUMERO_DE_COMMANDE=Ligne_Commande.NUMERO_DE_COMMANDE
     WHERE LIGNE_COMMANDE.NUMERO_DE_COMMANDE='1'
     GROUP BY TAUX, DESCRIPTION, COMMANDE.REMISE_EN_POURCENT_TOTALE
     UNION
     SELECT 0 as TVA1, TVA.DESCRIPTION, TVA.TAUX, COMMANDE.REMISE_EN_POURCENT_TOTALE
     FROM LIGNE_COMMANDE
     JOIN TVA on TVA.NUMERO_TVA=LIGNE_COMMANDE.NUMERO_TVA
     JOIN Commande ON Commande.NUMERO_DE_COMMANDE=Ligne_Commande.NUMERO_DE_COMMANDE
     WHERE LIGNE_COMMANDE.NUMERO_DE_COMMANDE='1')
     GROUP BY TAUX, DESCRIPTION, REMISE_EN_POURCENT_TOTALE
    Les chiffres ne sont pas gros. Voyez-vous de quel problème il s'agit ?

    Merci

  2. #2
    Membre Expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Par défaut
    Quels sont les types de champs utilisés ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Par défaut
    Merci de vous pencher sur mon problème.

    Voici les type des champs calculés :

    "REMISE_EN_POURCENT_TOTALE" NUMERIC(18,4),
    "QUANTITE" NUMERIC(18,4),
    "PU_HT" NUMERIC(18,4),
    "REMISE" NUMERIC(18,4),
    "REMISE_EN_POURCENT" NUMERIC(18,4),
    "TAUX" NUMERIC(18,4),

  4. #4
    Membre éclairé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Par défaut
    Aucune idée ?
    Vous avez besoin de plus d'informations ?

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    591
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 591
    Par défaut
    Bonjour,

    Par hasard, tu n'aurais pas un problème avec le point décimal et la virgule décimale.

    En effet, tes nombres sont affichés avec la virgule décimale et dans 0.99 tu retiens le point décimal.

    Il s'agit juste d'une réflexion.

    Bon courage

  6. #6
    Membre éclairé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Par défaut
    Je ne pense pas que ce soit ça. J'ai une erreur si je met une virgule.

    En effet, c'est juste IBOConsole qui 'affiche comme ça. C'est bien des float qui sont utilisés.

    J'ai toujours le problème avec un code beaucoup plus court.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT SUM((LIGNE_COMMANDE.PU_HT * LIGNE_COMMANDE.QUANTITE - Ligne_Commande.Remise  - (Ligne_Commande.PU_HT / 100 * Ligne_Commande.Quantite * Ligne_Commande.Remise_en_pourcent)) * (TVA.TAUX / 100)) * (1 - (REMISE_EN_POURCENT_TOTALE / 100)) as TVA1, TVA.DESCRIPTION, TVA.TAUX, COMMANDE.REMISE_EN_POURCENT_TOTALE
     FROM LIGNE_COMMANDE
     JOIN TVA on TVA.NUMERO_TVA=LIGNE_COMMANDE.NUMERO_TVA
     JOIN Commande ON Commande.NUMERO_DE_COMMANDE=Ligne_Commande.NUMERO_DE_COMMANDE
     WHERE LIGNE_COMMANDE.NUMERO_DE_COMMANDE='1'
     GROUP BY TAUX, DESCRIPTION, COMMANDE.REMISE_EN_POURCENT_TOTALE

  7. #7
    Membre Expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Par défaut
    Citation Envoyé par gandf Voir le message
    Voici les type des champs calculés :

    "REMISE_EN_POURCENT_TOTALE" NUMERIC(18,4),
    "QUANTITE" NUMERIC(18,4),
    "PU_HT" NUMERIC(18,4),
    "REMISE" NUMERIC(18,4),
    "REMISE_EN_POURCENT" NUMERIC(18,4),
    "TAUX" NUMERIC(18,4),
    18,4 ? pour un taux de TVA ?
    18,4 ? pour une remise en % ?
    18,4 ? pour un taux ?
    quelle idée ?
    Il faut changer ça, et caster les éléments dans vos expressions
    et ne pas oublier que:
    Numeric(p1,s1)/Numeric(p2,s2) donne un Numeric(18,s1+s2)
    idem pour la multiplication

    j'ajoute que la règle générale veut que l'on utilise des valeurs à décimales fixes pour ce que l'on compte et des valeurs flottantes pour ce que l'on mesure. Il est tout à fait cohérent de définir une table qui va utiliser par exemple : un INTEGER pour le nombre commandé, un DECIMAL pour la valeur totale de la vente et un FLOAT pour le pourcentage de rabais.

  8. #8
    Membre éclairé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Par défaut
    Merci, c'était bien ça le problème. J'ai pas fait attention aux types des données numériques.
    Je ne savais pas qu'il fallait caster quand l'on fait des calculs en SQL parce que d'habitude, je n'ai pas besoin de faire de calcul dans mes requêtes.

    MERCI

  9. #9
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut
    J'ajoute que la référence ce problème : http://firebird.developpez.com/faq/?...rreur#TRA00207

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

Discussions similaires

  1. Critères avec opérateurs dans une requête avec des champs calculés
    Par lmollard dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 11/05/2008, 18h53
  2. Réponses: 4
    Dernier message: 05/05/2008, 18h51
  3. Requete mise à jour avec un champ calculé
    Par gberthier dans le forum Requêtes et SQL.
    Réponses: 35
    Dernier message: 24/04/2008, 14h25
  4. Probleme avec les champs calculé
    Par Malou3216 dans le forum Modélisation
    Réponses: 6
    Dernier message: 23/05/2007, 14h31
  5. additionner un aggregat avec un champ calculé
    Par pierrot67 dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/10/2006, 13h08

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