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

Bases de données Delphi Discussion :

[UIBQuery] Procedure stockée et Paramètre OUT


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 182
    Points : 186
    Points
    186
    Par défaut [UIBQuery] Procedure stockée et Paramètre OUT
    Bonjour,

    J'utilise, ou plutôt je teste, depuis peu les composants UIB 2.5 afin de laisser tomber le BDE et pouvoir utiliser Firebird petit à petit et laisser tomber IB 7.1

    Mais je n'arrive pas à bien gérer mes procédures stockées, voilà une exemple :

    la procédure :
    Code sql : 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
     
    CREATE PROCEDURE "RESERVEDOC" 
    RETURNS
    (
      "NEWKEY" INTEGER
    )
    AS
    BEGIN
    SELECT COUNT(*) FROM DOC_TETE INTO :NewKey;
    IF (NewKey=0) THEN
        BEGIN
        NewKey=1;
        END
    ELSE
        BEGIN
        SELECT MAX(CLE) FROM DOC_TETE INTO :NewKey;
        NewKey=NewKey+1;
        END
    INSERT INTO DOC_TETE (CLE) VALUES (:NewKey);
    END

    Je l'appelle comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    1:     FIB := TUIBQuery.Create(nil);
    2:     FIB.BuildStoredProc('RESERVEDOC');
    3:     FIB.Open;
    4:     Cle := FIB.Params.ByNameAsInteger('NewKey');
    Si je fais comme ça j'ai une violation d'accès, car il n'y a apparemment aucun paramètre renseigné.

    Mais si je change la ligne 4 de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    4:     Cle := FIB.Fields.ByNameAsInteger('NewKey');
    Ca ne plante pas, mais par contre Cle=0 alors que elle ne devrait pas... Alors qu'avec un TStoredProc (BDE) ca renvoie la bonne valeur.

    Une idée ?

  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

    C'est bien Fields qu'il faut utiliser pour récupérer le(s) valeurs(s) en retour.

    Cependant une question: Où est le SUSPEND dans ta PS ?

    [Edit]
    Pourquoi ne pas utiliser un générateur au lieu de cette procédure stockée. Ce serait plus simple et plus sûr.

    @+ Claudius

  3. #3
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 182
    Points : 186
    Points
    186
    Par défaut
    Où est le SUSPEND dans ta PS ?
    Je n'ai pas de Suspend dans toutes mes procédures. Et elles fonctionnent quand même très bien. Ca pourrait tout de même être la cause du problème ?

    Pourquoi ne pas utiliser un générateur au lieu de cette procédure stockée
    Je ne peux pas changer la structure de ma base, c'est historique (je ne l'ai pas créée moi-même) et je veux changer uniquement le type d'accès mais je ne peux pas revoir entièrement mon programme qui est assez énorme...

  4. #4
    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
    Citation Envoyé par loukoum82 Voir le message
    Ca pourrait tout de même être la cause du problème ?
    Le SUSPEND est obligatoire dès lors que la PS doit alimenter des valeurs de sortie. Ajoute le à la fin de ta procédure.

    @+

  5. #5
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 182
    Points : 186
    Points
    186
    Par défaut
    Merci !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/05/2011, 10h58
  2. Executer une procedure stockée avec paramètre
    Par SonnyFab dans le forum ASP.NET
    Réponses: 6
    Dernier message: 11/08/2010, 12h07
  3. [MySQL] Paramètre OUT dans procedure stockée
    Par Nandacore dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 20/08/2009, 17h58
  4. Récupération des paramètres avec une procedure stockée
    Par samlerouge dans le forum Bases de données
    Réponses: 2
    Dernier message: 31/03/2004, 22h00

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