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 :

[Firebird] Procedure stockee via delphi


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Par défaut [Firebird] Procedure stockee via delphi
    Bonjour a tous,


    je suis pas tres content du titre


    je "pilote" Firebird 2.1 depuis Delphi7 en utilisant les composants UIB.

    J'ai une PS du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    FOR select * from Table 
    DO Begin
              IF qq THEN
              Begin
                     UPDATE OR INSERT INTO Table1 (
                                  Table1.Champ1,
                                  Table1.Champ2)
                     VALUES (Table.Champs1,
                                  une_valeur);         
              END
              Suspend;
         END
    Le pb ne porte pas sur la PS (l'execution via IBExpert fonctionne parfaitement), non son execution via les UIBs

    Normalement l'appel de la procedure se fait via :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query_Firebird.BuildStoredProc('PS_RECUP_DATA', False);
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Query_Firebird.Execute;
    Or lorsque je veux lire les infos qui sorte avec le SUSPEND dans les variables de sortie, la premiere ligne est parfaitement lu, mais a la suivant (Query_Firebird.Next) je recois un message d'erreur :

    Request synchronisation error
    unsucceful execution caused by system error that does not preclude successful execution of subsequent statements
    error code 44

    J'ai essaye en mettant true au lieu de false (Query_Firebird.BuildStoredProc('PS_RECUP_DATA', True) et en laissant
    Query_Firebird.Execute en lieu et place de Query_Firebird.Open;

    Dans ce cas je recupere les infos mais la mise a jour des tables ne s'effectue pas.

    Le parametres de tansaction sont a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Trans_Firebird.Options := [tpConsistency, tpWait, tpWrite];
    Je pense que le pb est a ce niveau, mais je ne vois pas quoi faire

    a+

    olivier

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 595
    Billets dans le blog
    65
    Par défaut
    Je ne comprend pas exactement l'ensemble de la procédure , QQ correspond au paramètre ?

    De toute façon , en tout état de cause , ta procédure renvoyant des informations il faut bien faire un Open et non un Exécute
    et ceci sur un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM PS_RECUP_DATA(False)

  3. #3
    Membre Expert
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Par défaut
    Bonjour SergioMaster,


    Je suis bien d'accord. Mais en faisant l' "open" ca ne marche pas.

    La fonction de la PS est de m'envoyer des informations et dans ce cas mettre a jour la table des "Envoi d'information'.

    si je prend l'exemple d'un publipostage. La PS selectionne les clients et ajoute l'infos de cette envoi dans la table des 'envoi aux clients'.
    La PS a donc 2 fonctions, l'une de selection de infos (client) et l'autre d'ecriture dans une table.
    Evidemment, je peux le faire en 2 etapes (2 PS), mais je trouvais plus elegant de le faire en 1 seule.

    j'espere etre clair
    a+

    olivier

  4. #4
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Par défaut
    Salut,

    Je n'ai pas encore eu le temps de voir FB2 mais avec FB1.5 dès qu'il y a retour de plus d'une lignes (dans ton cas), il faut utiliser un query mais pas une procédure stocké pour récupéré les valeurs comme SergioMaster l'as indiqué.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from TA_PROCEDURE_STOCKE(Param1,...,paramx)

  5. #5
    Membre Expert
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Par défaut
    Oups j'avais pas compris ca !


    J'ai mis cette PS dans une query
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Query.SQL.Text := 'SELECT * FROM Ps_Bla_Bla(:param1, :Param2)';
    Query.Params.ByNameAsString['param1'] := 'Bla';
    Query.Params.ByNameAsString['param2'] := 'BlaBla';
    Query.Open(True);
    et ca marche, bien sur

    merci a tous les 2

    et maintenant

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 595
    Billets dans le blog
    65
    Par défaut
    ça t'apprendra a bien lire

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

Discussions similaires

  1. procedure stockee, transaction et delphi
    Par asenaici dans le forum SQL
    Réponses: 0
    Dernier message: 12/04/2012, 11h04
  2. Réponses: 0
    Dernier message: 04/02/2010, 17h56
  3. [Firebird D7] Modifier une procedure stocké via Delphi
    Par EGI dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 30/03/2005, 15h54
  4. procedure stockee et sql
    Par fred33 dans le forum SQL
    Réponses: 2
    Dernier message: 27/11/2003, 10h23
  5. [VB6] [ADO] Procedure stockée : spécifier les paramètres
    Par adepdoom dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/10/2002, 10h45

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