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 :

Invalid Request BLR


Sujet :

Firebird

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 33
    Points : 31
    Points
    31
    Par défaut Invalid Request BLR
    Bonsoir,

    J'ai tenté de créer un procédure stcokée en runtime mai à l'exécution du script, je reçois le message suivant :

    Invalid BLR Request at offset ... Bad Parameter Number.

    Une idée ?? Merci.

    Win XP SP2, FB 2.0, D7, Zeos 664

    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
     
    SET TERM ^ ;
     
    ALTER PROCEDURE GET_CA_CLIENT (
        ID_CLIENT INTEGER,
        DATE_CA DATE)
    RETURNS (
        TOT_VENTE DECIMAL(15,2),
        TOT_CAISSE DECIMAL(15,2))
    AS
    begin
      SELECT SUM(MT_HT)
      FROM F_ENT
      WHERE ID_CLIENT=:ID_CLIENT AND
                DATE_FACT <=:DATE_CA
      into TOT_VENTE;
     
      SELECT SUM(MT_ESP)
      FROM F_ENT_CS
      WHERE ID_CLIENT=:ID_CLIENT AND
                DATE_FACT <=:DATE_CA
      into TOT_CAISSE;
     
      suspend;
    end^
     
    SET TERM ; ^

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      -- ...
      INTO :TOT_VENTE;
      -- ... 
      INTO :TOT_CAISSE;
    Il manque les deux-points ( : ) devant tes paramètres output. Non ?

    @+

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 33
    Points : 31
    Points
    31
    Par défaut
    Merci Cl@udius.

    Ce script, je l'ai récupéré à partir du metadata fourni par l'utilitaire IBExpert ou tout baigne.
    C'est en voulant recréer la base de données en runtime que j'ai eu ce message.

    Ca ne marche pas quand on met les 2 points ':'. Je viens d'essayer !

    Petite précision : Avec le seulement un seul select sur la première table, ça marche mais quand j'ajoute le 2éme select sur le 2éme table, l'erreur survient.

    Merci.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 33
    Points : 31
    Points
    31
    Par défaut
    Si j'ai bien compris, on ne peut pas créer ce genre de procédure par programme !
    Ceci est pourtant utile pour créer ma BD à partir de son script.

    Merci à vous.

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bien qu'un peu tard , je peux enfin répondre a cette question .

    Pour faire ce qui est demandé (créer une procedure voire même plusieurs) avec Zeos voici une démarche qui fonctionne

    utiliser le composant ZSQLProcessor
    mettre les propriétés delimiter := '^' et delimiterType:=dtsetTerm

    pour le script , pas besoin de mettre de 'SET TERM'

    ATTENTION , j'ai lu sur le forum qu'il ne fallait pas mettre de lignes blanches dans le corps d'une procédure ou autre (à priori un problème de pré-process)

    donc dans ton cas :

    le script devient :

    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
    ALTER PROCEDURE GET_CA_CLIENT (
        ID_CLIENT INTEGER,
        DATE_CA DATE)
    RETURNS (
        TOT_VENTE DECIMAL(15,2),
        TOT_CAISSE DECIMAL(15,2))
    AS
    begin
      SELECT SUM(MT_HT)
      FROM F_ENT
      WHERE ID_CLIENT=:ID_CLIENT AND
                DATE_FACT <=:DATE_CA
      INTO TOT_VENTE;
      SELECT SUM(MT_ESP)
      FROM F_ENT_CS
      WHERE ID_CLIENT=:ID_CLIENT AND
                DATE_FACT <=:DATE_CA
      INTO TOT_CAISSE;
      suspend;
    end^
    bien sur , je n'ai pas tester exactement cette procédure , mais une identique .
    nb . je ne sais pas si le suspend est utile dans ce cas , puisque ce n'est pas un ensemble de données qui est renvoyé

    PS . je pense que les UIB sont plus adaptées pour ce genre de travail et n'aurait pas déclenché ce genre de problème
    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

  6. #6
    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 SergioMaster Voir le message
    nb . je ne sais pas si le suspend est utile dans ce cas , puisque ce n'est pas un ensemble de données qui est renvoyé
    Et comment il récupère son résultat, sinon ?
    Si vous êtes libre, choisissez le Logiciel Libre.

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par TryExceptEnd Voir le message
    Et comment il récupère son résultat, sinon ?
    par un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from GET_CA_CLIENT (ID_CLIENT, DATE_CA DATE)
    je ne sais pas si c'est une bonne chose mais pour l'avoir maintes fois oublié (le suspend) je sais par expérience que cela fonctionne si seul un singleton est retourné
    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
    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
    Ça m'étonnerait que Firebird accepte cette syntaxe.
    sans le SUSPEND, une procédure stockée n'est pas sélectionnable, seulement exécutable.
    Avec le SUSPEND, une procédure stockée est sélectionnable et aussi exécutable mais dans ce cas elle retourne une seule ligne (le SUSPEND faisant office de EXIT).
    Si vous êtes libre, choisissez le Logiciel Libre.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 245
    Points : 534
    Points
    534
    Par défaut
    Bonjour,
    Citation Envoyé par TryExceptEnd Voir le message
    Avec le SUSPEND, une procédure stockée est sélectionnable et aussi exécutable mais dans ce cas elle retourne une seule ligne (le SUSPEND faisant office de EXIT).
    Si vous donnez à EXIT le même sens que dans une procédure Delphi ou Lazarus (Pascal), où il met fin à la procédure, c'est inexacte. Le SUSPEND émet le jeu de données prévu dans RETURN et attend qu'il soit récupéré avant d'émettre le jeu suivant s'il est compris dans une boucle ou au SUSPEND suivant, jusqu'à ce que soit atteinte la fin de la procédure.
    Si la procédure a des paramètres de sortie (RETURN...), il doit y avoir un ou des SUSPEND, et ne doit pas avoir de SUSPEND s'il n'y a pas de paramètres de sortie. La requête doit donc être du type "select x,y from MaProcedure(a,b)" si la procédure retourne x et y, ou "execute procedure MaProcedure(a,b)" s'il n'y a pas de retour.

    André

  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 alanglet Voir le message
    Bonjour,
    Si vous donnez à EXIT le même sens que dans une procédure Delphi ou Lazarus (Pascal), où il met fin à la procédure, c'est inexacte. Le SUSPEND émet le jeu de données prévu dans RETURN et attend qu'il soit récupéré avant d'émettre le jeu suivant s'il est compris dans une boucle ou au SUSPEND suivant, jusqu'à ce que soit atteinte la fin de la procédure.
    Je persiste a dire que dans une procédure exécutable (EXECUTE PROCEDURE) le premier SUSPEND émet la ou les données prévues dans le RETURNS et arrête la procédure et dans ce cas précis le EXIT a le même effet que le SUSPEND.

    Citation Envoyé par alanglet Voir le message
    Si la procédure a des paramètres de sortie (RETURN...), il doit y avoir un ou des SUSPEND, et ne doit pas avoir de SUSPEND s'il n'y a pas de paramètres de sortie. La requête doit donc être du type "select x,y from MaProcedure(a,b)" si la procédure retourne x et y, ou "execute procedure MaProcedure(a,b)" s'il n'y a pas de retour.
    ET "execute procedure MaProcedure(a,b) RETURNING_VALUES :Variable" s'il y a retour.
    Si vous êtes libre, choisissez le Logiciel Libre.

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    On dérive du sujet principal , qui était : une tentative de création d'un procédure via ZEOSDBO

    Que de polémique pour un nota bene
    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

  12. #12
    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
    Je ne suis pas sur ce forum pour polémiquer mais rectifier une erreur que j'estime assez grave pour ne pas la laisser passer, il y a des lecteurs qui seraient induis en erreur et se retrouver bloqués pour des infos qu'ils croyaient justes.
    Si vous êtes libre, choisissez le Logiciel Libre.

  13. #13
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 33
    Points : 31
    Points
    31
    Par défaut
    Merci les amis.

    Désolé SergioMaster mais je n'arrive pas à créer ma procédure.
    J'ai toujours le fameux message Invalid BLR Request ... Bad parameter Number !
    J'ai pourtant suivi la syntaxe que vous avez conseillée à la lettre.

  14. #14
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 33
    Points : 31
    Points
    31
    Par défaut
    All is Ok !

    J'ai fini par avoir la solution d'un autre forum, celui de Zeos.

    Au fait le composant TZSQLProcessor que j'utilise a une propriété ParamCheck qu'il fallait mettre à False.

    C'était si simple mais j'ai galéré. Allez savoir !!!!

    Merci à tous,

    Yves.

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

Discussions similaires

  1. reCaptcha retourne "invalid-request-cookie"
    Par xxkirastarothxx dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 16/10/2013, 11h04
  2. [XL-2000] Shape (unknown member) : Invalid request
    Par darchisgod dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/07/2011, 11h47
  3. [Interbase] Invalid request BLR at offset 47.
    Par jakouz dans le forum InterBase
    Réponses: 1
    Dernier message: 06/05/2011, 17h36
  4. Invalid method in request
    Par julien.63 dans le forum Apache
    Réponses: 1
    Dernier message: 25/09/2007, 17h42
  5. Réponses: 4
    Dernier message: 26/03/2007, 18h06

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