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

Firebird Discussion :

integer overflow(depassement de bit)


Sujet :

Firebird

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut integer overflow(depassement de bit)
    bonjour à tous,

    Je me retrouve encore confronté à un problème de dépassement de capacité. En effet j'ai une table "LOCATION" qui contient un trigger beforeapdate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
               mon=pua*qte
    /*  mon numeric(14,2)
         pua numeric(14,5)
         qte numeric(14,5)
      */
    et on faisant une requête d'insertion de données exple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
              insert into LOCATION (ord,pua,qte) values (1,1452.4521,6844.424)
    il me signale erreur integer overflow, dépassement de bit. J'ai bien compris que le champs mon ne peut pas prendre la valeur (pua*qte), mais le problème comment contrôler ça.

    merci de votre aide

  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 : 60
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    en faisant un cast

    actuellement voilà ce que vous avez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> select (cast(1452.4521 as numeric(14,5)) * cast(6844.424 as numeric(14,5))) from rdb$database;
     
                 MULTIPLY 
    ===================== 
       9941198.0120904000
    faites plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SQL> select cast(1452.4521*6844.424 as numeric(14,2)) from rdb$database;
     
                     CAST 
    ===================== 
               9941198.01 
     
    SQL> select cast(cast(1452.4521 as numeric(14,5)) * cast(6844.424 as numeric(14,5)) as numeric(14,2)) from rdb$database;
     
                     CAST 
    ===================== 
               9941198.01
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    j'ai essayé ta solution comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    new.mon=cast(pua as numeric(14,2))*cast(qte as numeric(14,2))
    et ça marche , mais l'arrondissement est faussé.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    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 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par chekkal Voir le message
    j'ai essayé ta solution comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    new.mon=cast(pua as numeric(14,2))*cast(qte as numeric(14,2))
    et ça marche , mais l'arrondissement est faussé.
    c'est pas ce qui a été indiqué ! il faut bien relire

    c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new.mon=cast(new.pua*new.qte as numeric(15,2))
    que Philippe a indiqué
    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

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    plutôt comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new.mon=cast(new.pua*new.qte as numeric(14,2))

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

Discussions similaires

  1. Integer overflow avec un SELECT
    Par freud dans le forum SQL
    Réponses: 2
    Dernier message: 22/10/2010, 00h10
  2. Integer overflow avec un champs calculé
    Par gandf dans le forum SQL
    Réponses: 10
    Dernier message: 09/11/2009, 11h57
  3. [phpMyAdmin] Possible integer overflow in memory allocation
    Par Toriyama dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 17/03/2009, 12h24
  4. [Pointer integer different size] 64 bits ?
    Par earl29 dans le forum Débuter
    Réponses: 10
    Dernier message: 06/09/2008, 11h22
  5. Message "Integer overflow"
    Par woully dans le forum Delphi
    Réponses: 8
    Dernier message: 20/11/2006, 23h15

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