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 :

Pbm avec creation d'une SP à l'aide de TZSQLProcessor


Sujet :

SQL Firebird

  1. #1
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut Pbm avec creation d'une SP à l'aide de TZSQLProcessor
    Bonjour à tous,

    Voilà, je galère depuis hier pour créer une Procédure stockée. En voici 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    SET TERM ^ ;
     
    ALTER PROCEDURE SET_PRICE (
        ID_ART INTEGER)
    AS
    declare variable marge dec_15_4;
    declare variable marge_1 dec_15_4;
    declare variable marge_2 dec_15_4;
    declare variable marge_3 dec_15_4;
    declare variable marge_4 dec_15_4;
    declare variable cump dec_15_2;
    declare variable tot_1 dec_15_2;
    declare variable tot_2 dec_15_2;
    declare variable qte_1 dec_15_2;
    declare variable qte_2 dec_15_2;
    begin
      /* Procedure Text */
      TOT_1 = 0;
      QTE_1 = 0;
      TOT_2 = 0;
      QTE_2 = 0;
     
      MARGE_1=-1 ;
      MARGE_2=-1 ;
      MARGE_3=-1 ;
      MARGE_4=-1 ;
     
     
      SELECT ((P_VENTE-P_HA)/P_HA), (PV1-P_HA)/P_HA,
             (PV2-P_HA)/P_HA, (PV3-P_HA)/P_HA,
             (PV4-P_HA)/P_HA
      FROM FART
      WHERE (ID_ART=:ID_ART) AND
            (P_HA <> 0) AND
            (NOT P_HA IS NULL)
      INTO MARGE, MARGE_1, MARGE_2, MARGE_3, MARGE_4;
     
      if (MARGE_1<0) then MARGE_1=-1 ;
      if (MARGE_2<0) then MARGE_2=-1 ;
      if (MARGE_3<0) then MARGE_3=-1 ;
      if (MARGE_4<0) then MARGE_4=-1 ;
     
      SELECT SUM(QTE*P_UNIT), SUM(QTE)
      FROM FDET_H
      WHERE (ID_ART=:ID_ART) AND
            (QTE > 0) AND (NOT QTE IS NULL) AND
            (P_UNIT <> 0) AND (NOT P_UNIT IS NULL)
      HAVING (SUM(QTE) <> 0)
      INTO TOT_1,  QTE_1;
     
      SELECT SUM(QTE*P_UNIT), SUM(QTE)
      FROM T_STK_INIT
      WHERE (ID_ART=:ID_ART) AND
            (QTE > 0) AND (NOT QTE IS NULL) AND
            (P_UNIT <> 0) AND (NOT P_UNIT IS NULL)
      HAVING (SUM(QTE) <> 0)
      INTO TOT_2,  QTE_2;
     
      CUMP = TOT_1/QTE_1;
      if (NOT QTE_2 IS NULL ) then CUMP = (TOT_1 + TOT_2)/(QTE_1 + QTE_2);
     
     
      UPDATE FART SET
             P_HA=:CUMP,
             P_VENTE=:CUMP * (1+:MARGE),
             PV1=:CUMP * (1+:MARGE_1),
             PV2=:CUMP * (1+:MARGE_2),
             PV3=:CUMP * (1+:MARGE_3),
             PV4=:CUMP * (1+:MARGE_4)
      WHERE ID_ART=:ID_ART;
     
     
      suspend;
    end^
     
    SET TERM ; ^
    A l'exécution à l'aide d'une TZSQLProcesseur, je reçois le message : Invalid Request BLR at ... Bad Parameter while parsing procedure

    Merci de votre aide.

    W7, D7, FB2.5 et Outils Zeos 7.1.2

  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 n'ai pas regardé en détail mais il y a un problème avec vos

    SELECT ...
    INTO :VARIABLES.

    Dans la partie INTO il faut préfixer par : les noms des variables qui reçoivent les résultats.

    Essayez ceci :

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    SET TERM ^ ;
     
    ALTER PROCEDURE SET_PRICE (
        ID_ART INTEGER)
    AS
    declare variable marge dec_15_4;
    declare variable marge_1 dec_15_4;
    declare variable marge_2 dec_15_4;
    declare variable marge_3 dec_15_4;
    declare variable marge_4 dec_15_4;
    declare variable cump dec_15_2;
    declare variable tot_1 dec_15_2;
    declare variable tot_2 dec_15_2;
    declare variable qte_1 dec_15_2;
    declare variable qte_2 dec_15_2;
    begin
      /* Procedure Text */
      TOT_1 = 0;
      QTE_1 = 0;
      TOT_2 = 0;
      QTE_2 = 0;
     
      MARGE_1=-1 ;
      MARGE_2=-1 ;
      MARGE_3=-1 ;
      MARGE_4=-1 ;
     
     
      SELECT ((P_VENTE-P_HA)/P_HA), (PV1-P_HA)/P_HA,
             (PV2-P_HA)/P_HA, (PV3-P_HA)/P_HA,
             (PV4-P_HA)/P_HA
      FROM FART
      WHERE (ID_ART=:ID_ART) AND
            (P_HA <> 0) AND
            (NOT P_HA IS NULL)
      INTO :MARGE, :MARGE_1, :MARGE_2, :MARGE_3, :MARGE_4;
     
      if (MARGE_1<0) then MARGE_1=-1 ;
      if (MARGE_2<0) then MARGE_2=-1 ;
      if (MARGE_3<0) then MARGE_3=-1 ;
      if (MARGE_4<0) then MARGE_4=-1 ;
     
      SELECT SUM(QTE*P_UNIT), SUM(QTE)
      FROM FDET_H
      WHERE (ID_ART=:ID_ART) AND
            (QTE > 0) AND (NOT QTE IS NULL) AND
            (P_UNIT <> 0) AND (NOT P_UNIT IS NULL)
      HAVING (SUM(QTE) <> 0)
      INTO :TOT_1,  :QTE_1;
     
      SELECT SUM(QTE*P_UNIT), SUM(QTE)
      FROM T_STK_INIT
      WHERE (ID_ART=:ID_ART) AND
            (QTE > 0) AND (NOT QTE IS NULL) AND
            (P_UNIT <> 0) AND (NOT P_UNIT IS NULL)
      HAVING (SUM(QTE) <> 0)
      INTO :TOT_2,  :QTE_2;
     
      CUMP = TOT_1/QTE_1;
      if (NOT QTE_2 IS NULL ) then CUMP = (TOT_1 + TOT_2)/(QTE_1 + QTE_2);
     
     
      UPDATE FART SET
             P_HA=:CUMP,
             P_VENTE=:CUMP * (1+:MARGE),
             PV1=:CUMP * (1+:MARGE_1),
             PV2=:CUMP * (1+:MARGE_2),
             PV3=:CUMP * (1+:MARGE_3),
             PV4=:CUMP * (1+:MARGE_4)
      WHERE ID_ART=:ID_ART;
     
    end^
     
    SET TERM ; ^
    Et le suspend ne sert à rien vu que vous ne renvoyez aucune données.

  3. #3
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    Merci pour la réponse.

    Avec les : devant les variables, j'ai carrément une erreur SQL du genre Dynamic SQL Error, Token unknown line 1 column 999 !

    NB : J'ai omis de signaler tantôt que le script s'exécute normalement lors de la création d'une nouvelle BD.

  4. #4
    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 : 576
    Points
    576
    Par défaut
    Citation Envoyé par akli_agha Voir le message
    Bonjour à tous,

    Voilà, je galère depuis hier pour créer une Procédure stockée. En voici 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    SET TERM ^ ;
     
    ALTER PROCEDURE SET_PRICE (
        ID_ART INTEGER)
    AS
    declare variable marge dec_15_4;
    declare variable marge_1 dec_15_4;
    declare variable marge_2 dec_15_4;
    declare variable marge_3 dec_15_4;
    declare variable marge_4 dec_15_4;
    declare variable cump dec_15_2;
    declare variable tot_1 dec_15_2;
    declare variable tot_2 dec_15_2;
    declare variable qte_1 dec_15_2;
    declare variable qte_2 dec_15_2;
    begin
      /* Procedure Text */
      TOT_1 = 0;
      QTE_1 = 0;
      TOT_2 = 0;
      QTE_2 = 0;
     
      MARGE_1=-1 ;
      MARGE_2=-1 ;
      MARGE_3=-1 ;
      MARGE_4=-1 ;
     
     
      SELECT ((P_VENTE-P_HA)/P_HA), (PV1-P_HA)/P_HA,
             (PV2-P_HA)/P_HA, (PV3-P_HA)/P_HA,
             (PV4-P_HA)/P_HA
      FROM FART
      WHERE (ID_ART=:ID_ART) AND
            (P_HA <> 0) AND
            (NOT P_HA IS NULL)
      INTO MARGE, MARGE_1, MARGE_2, MARGE_3, MARGE_4;
     
      if (MARGE_1<0) then MARGE_1=-1 ;
      if (MARGE_2<0) then MARGE_2=-1 ;
      if (MARGE_3<0) then MARGE_3=-1 ;
      if (MARGE_4<0) then MARGE_4=-1 ;
     
      SELECT SUM(QTE*P_UNIT), SUM(QTE)
      FROM FDET_H
      WHERE (ID_ART=:ID_ART) AND
            (QTE > 0) AND (NOT QTE IS NULL) AND
            (P_UNIT <> 0) AND (NOT P_UNIT IS NULL)
      HAVING (SUM(QTE) <> 0)
      INTO TOT_1,  QTE_1;
     
      SELECT SUM(QTE*P_UNIT), SUM(QTE)
      FROM T_STK_INIT
      WHERE (ID_ART=:ID_ART) AND
            (QTE > 0) AND (NOT QTE IS NULL) AND
            (P_UNIT <> 0) AND (NOT P_UNIT IS NULL)
      HAVING (SUM(QTE) <> 0)
      INTO TOT_2,  QTE_2;
     
      CUMP = TOT_1/QTE_1;
      if (NOT QTE_2 IS NULL ) then CUMP = (TOT_1 + TOT_2)/(QTE_1 + QTE_2);
     
     
      UPDATE FART SET
             P_HA=:CUMP,
             P_VENTE=:CUMP * (1+:MARGE),
             PV1=:CUMP * (1+:MARGE_1),
             PV2=:CUMP * (1+:MARGE_2),
             PV3=:CUMP * (1+:MARGE_3),
             PV4=:CUMP * (1+:MARGE_4)
      WHERE ID_ART=:ID_ART;
     
     
      suspend;
    end^
     
    SET TERM ; ^
    A l'exécution à l'aide d'une TZSQLProcesseur, je reçois le message : Invalid Request BLR at ... Bad Parameter while parsing procedure

    Merci de votre aide.

    W7, D7, FB2.5 et Outils Zeos 7.1.2
    Bonjour, essaye ceci : supprime la procédure, fait un backup/restore de la base et recréer ta procédure et donne nous le résultat.

  5. #5
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    Je viens de faire la job et toujours le même message !

  6. #6
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    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 786
    Points : 5 918
    Points
    5 918
    Par défaut
    Bonjour,
    Citation Envoyé par akli_agha Voir le message
    A l'exécution à l'aide d'une TZSQLProcesseur, je reçois le message : Invalid Request BLR at ... Bad Parameter while parsing procedure
    Vérifiez en mode conception ou par code que la propriété ParamCheck de votre composant TZSQLProcessor est bien initialisée à False.

  7. #7
    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 : 576
    Points
    576
    Par défaut
    Citation Envoyé par akli_agha Voir le message
    Bonjour à tous,
    A l'exécution à l'aide d'une TZSQLProcesseur, je reçois le message : Invalid Request BLR at ... Bad Parameter while parsing procedure

    Merci de votre aide.

    W7, D7, FB2.5 et Outils Zeos 7.1.2
    Il faudrait voir peut-être avec le composant TZSQLProcesseur, je ne connais pas bien les composants zeos mais je les trouve un peu limite question fiabilité, la preuve : l'ajout des deux point ":" lève une erreur alors que c'est la norme.

  8. #8
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    Enfin !

    Merci Phil et à tous les autres !

    En effet, ça a marché avec la propriété ParamCheck à False.

    Encore une fois, merci.

  9. #9
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 175
    Points : 41 367
    Points
    41 367
    Billets dans le blog
    63
    Par défaut
    Bonjour,
    Citation Envoyé par akli_agha Voir le message
    Voilà, je galère depuis hier pour créer une Procédure stockée.
    A l'exécution à l'aide d'une TZSQLProcesseur, je reçois le message : Invalid Request BLR at ... Bad Parameter while parsing procedure
    encore un fois il s'agit/s'agissait d'un problème Delphi et non Firebird
    Attention de poster au bon endroit !

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 16/08/2006, 15h24
  2. creation d'une table avec une clé primaire multiple
    Par oursquetaire dans le forum Oracle
    Réponses: 2
    Dernier message: 23/12/2005, 13h29
  3. Creation d'une table avec un TSQLQuery
    Par richard038 dans le forum Bases de données
    Réponses: 2
    Dernier message: 03/12/2005, 09h08
  4. Creation d'une table avec plusieurs clés
    Par mic79 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 21/06/2005, 11h17
  5. Creation d'une fonction temporaire avec droit datareader
    Par Bjuice2 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/10/2004, 14h26

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