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 :

Vue vers PS, problème incompréhensible !


Sujet :

SQL Firebird

  1. #1
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut Vue vers PS, problème incompréhensible !
    Salut

    ce bout de code fonctionne à merveille dans la vue mais quand je le mets dans une PS j'ai une erreur.

    voici le code en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    case when
                (tb_process.nh4_sortie is null) then '/'
                else tb_process.nh4_sortie*tb_process.volume_mj_sortie/1000
            end,
    l'erreur engendrée lors de l'exécution de la PS est
    Overflow occured during data type conversion.
    conversion error from string "/".
    une idée svp ?
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  2. #2
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Bonjour,

    Je dirais que la variable dans lequel vous renvoyez le résultat est de type numeric ou decimal ou float et donc quand le CASE renvoi le caractère '/', ca ne lui plait pas.

  3. #3
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Citation Envoyé par Barbibulle Voir le message
    Bonjour,

    Je dirais que la variable dans lequel vous renvoyez le résultat est de type numeric ou decimal ou float et donc quand le CASE renvoi le caractère '/', ca ne lui plait pas.
    Merci Barbibulle
    c'était ça effectivement mais pourquoi dans la requête ça passe malgré que le type de base du champ est numérique !!!

    comment puis-je le forcer dans la PS à prendre '/' quand c'est null

    merci encore
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  4. #4
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    case when
                (tb_process.nh4_sortie IS NULL) then '/'
                else tb_process.nh4_sortie*tb_process.volume_mj_sortie/1000
            end,
    Le type renvoyé par la requete est char ou varchar, c'est pour ca que ca fonctionne.

    Si le but de cette PS c'est de faire de la présentation de résultat, utilisez un varchar(xx). Si ce résultat vous souhaitez pouvoir l'utiliser dans d'autre calcul je vous déconseille de procéder ainsi.

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Ton paramètre de sortie étant de type DECIMAL il ne peut accepter un CHAR ("/" dans ton cas).

    Une solution: renvoie -1 au lieu de "/", et c'est au niveau de l'application que tu adaptes l'affichage des données.

    @+ Claudius

  6. #6
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Salut

    Ton paramètre de sortie étant de type DECIMAL il ne peut accepter un CHAR ("/" dans ton cas).

    Une solution: renvoie -1 au lieu de "/", et c'est au niveau de l'application que tu adaptes l'affichage des données.

    @+ Claudius
    Salut Cl@udius, effectivement c'est ce que j'ai fais.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  7. #7
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Salut

    dans le même état d'esprit, j'ai une autre requête qui donne le résultat souhaité mais quand je l'ai convertis en PS j'ai eu une erreur de type "arithmetic overflow or division by zero has occured".

    voici mon 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    BEGIN
        FOR
        select 
            d.date_bilan,
            c.nom_unite,
            b.nom_step,
            d.volume_mj_sortie* d.nombre_jour_reel as Vol_Traite_Mois,
            a.energie_active,
            a.energie_reactive,
            a.pma,
            a.rap_puissance,
            a.montant_facture,
            a.energie_active / (cast(nullif(d.volume_mj_sortie,0) as integer) * d.nombre_jour_reel) as Taux_consommation
        from tb_energie a
            inner join tb_step b on (a.code_step = b.code_step)
            inner join tb_unite c on (b.code_unite = c.code_unite)
            inner join tb_process d on (b.code_step = d.code_step)
     
        where 
            (
                (a.date_mois =:DATE_BILAN_SAISIE and d.date_bilan =:DATE_BILAN_SAISIE )
            )
     
        into
            :DATE_BILAN,
            :NOM_UNITE,
            :NOM_STEP,
            :VOLUME_TRAITE_MOIS,
            :ENERGIE_ACTIVE,
            :ENERGIE_REACTIVE,
            :PMA,
            :RAP_PUISSANCE,
            :MONTANT_FACTURE,
            :TAUX_CONSOMMATION
    DO
      BEGIN
        suspend;
      END
    END
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  8. #8
    Membre confirmé Avatar de TryExceptEnd
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 501
    Points : 574
    Points
    574
    Par défaut
    Division par zéro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a.energie_active / (cast(nullif(d.volume_mj_sortie,0) AS integer) * d.nombre_jour_reel) AS Taux_consommation
    Si vous êtes libre, choisissez le Logiciel Libre.

  9. #9
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Citation Envoyé par TryExceptEnd Voir le message
    Division par zéro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a.energie_active / (cast(nullif(d.volume_mj_sortie,0) AS integer) * d.nombre_jour_reel) AS Taux_consommation
    je ne crois pas que j'ai une division par zéro car la fonction nullif renvoie null quand le volume vaut 0 et dans la requête sa passe.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  10. #10
    Membre confirmé Avatar de TryExceptEnd
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 501
    Points : 574
    Points
    574
    Par défaut
    Citation Envoyé par Just-Soft Voir le message
    je ne crois pas que j'ai une division par zéro car la fonction nullif renvoie null quand le volume vaut 0 et dans la requête sa passe.
    Ah oui, désolé pour la précipitation, ça doit être donc un débordement du a un type de colonne qui ne supporte pas le résultat d'une multiplication.
    Si vous êtes libre, choisissez le Logiciel Libre.

  11. #11
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Bonjour !

    je viens de trouver l'erreur, il s'agit de la taille d'une variable de type varchar bizarre que FB ne tronque pas le résultat mais le signal comme erreur arithmétique ou de conversion
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

Discussions similaires

  1. Réponses: 0
    Dernier message: 08/08/2012, 10h05
  2. Problème incompréhensible! Fichier + liste
    Par djsbens dans le forum C
    Réponses: 2
    Dernier message: 07/12/2005, 00h30
  3. Réponses: 1
    Dernier message: 01/11/2005, 12h04
  4. Problème incompréhensible
    Par bugalood dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2005, 11h49
  5. Adaptation d'un code TMemo vers TRichEdit : problème de ScrollBars
    Par Droïde Système7 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/01/2005, 15h06

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