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 :

Exécution impossible de procédure


Sujet :

Bases de données Delphi

  1. #1
    Membre confirmé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 769
    Points : 542
    Points
    542
    Par défaut Exécution impossible de procédure
    Bonjour à tous et bonne année

    Commence mal pour moi : impossible d'utiliser une procédure enregistrée !
    Voici l'environnement
    Je travaille en Delphi 7 avec Firebird 2.1
    J'ai une application en CLX et la même en VCL. Suite à un crash de disque dûr, j'ai tout réinstallé (Windows 7). L'application CLX fonctionne à la perfection. Mais lorsque j'ai voulu exécuter la même en VCL, (donc même base) la compilation est impeccable, c'est à l'exécution que j'ai eu le message suivant :
    SQL error: Dynamic SQL Error SQL error code = -501. Attempt to reclose a closed cursor. The cursor identified in a FETCH or CLOSE statement is not open
    Après plusieurs recherches, j'ai créé la procédure suivante BIDON:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    begin
      /* Procedure Text */
      t= current_time;
     suspend;
    end
    T est une variable locale dans le procédure. (Vraiment une procédure Bidon )
    Puis j'ai créé une petite application VCL avec 1 composant Zeos ZConnection et un composant ZQuery. Dans le SQL du ZQuery j'ai codifié
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    execute procedure bidon
    Sans même lancer l'exécution, simplement en cliquant sur Active du composant ZQuery, j'ai le message. Même chose si je change le ZQuery en ZStoreProc et que je veux connecter.
    Pour information, avant le crash, les deux applications fonctionnaient sans aucun problème de procédure !
    Je patauge !
    Ce qui se conçoit bien s'énonce clairement
    Et les mots pour le dire viennent aisément (Boileau)

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    La version des ZEOS ? a peut être changé suite à la réinstallation

    je te propose une procedure 'BIDON' un peu améliorée , histoire de voir a minima un résultat (d'où le suspend )
    (note indiquer Code=SQL pour le code que tu as mis aurait été judicieux)
    Code SQL FB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SET TERM ^ ;
    CREATE PROCEDURE BIDON (
        LAPS Integer )
    RETURNS (
        T Timestamp )
    AS
    BEGIN
      t=current_timestamp+laps;
      suspend; 
    SET TERM ; ^

    avec les paramètres par défaut d'un TZStoredProc (zeos 7.0)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    ZStoredProc1.Unprepare; // obligatoire si l'on veut exécuter plusieurs fois 
    ZStoredProc1.ParamByName('LAPS').asInteger:=2;
    ZStoredProc1.ExecProc;
    end;
    ce code fonctionne

    ou encore via une TZ(readOnly)Query
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM BIDON(:L)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    ZReadOnLyQuery1.Active:=false;
    ZReadonlyQuery1.ParamByName('L').asInteger:=2;
    ZReadOnLyQuery1.Active:=true;
    end;
    pour une procedure qui ne renvoi aucun résultat (pas de suspend , pas de input , pas de returns)
    Code SQL FB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SET TERM ^ ;
    CREATE PROCEDURE BIDONRIEN
    AS
    BEGIN
      DELETE FROM TABLE WHERE NUMERO=-1; 
    END^
    SET TERM ; ^

    un simple , suffit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    ZStoredProc1.ExecProc;
    end;
    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

  3. #3
    Membre confirmé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 769
    Points : 542
    Points
    542
    Par défaut
    Hélas aucun des essais que tu proposes ne fonctionne. Si l'essai 2 (avec un ReadOnlyQuerry n'envoie pas de message, c'est qu'il ne fait strictement rien. Il est même possible que la procédure ne soit pas appelée en exécution
    Ce qui se conçoit bien s'énonce clairement
    Et les mots pour le dire viennent aisément (Boileau)

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

Discussions similaires

  1. [MySQL 5.1]Exécution d'une procédure au démarrage du serveur.
    Par Alexandre T dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 16/06/2006, 14h54
  2. Accès non autorisé à l'exécution d'une procédure stockée
    Par celine33 dans le forum Bases de données
    Réponses: 6
    Dernier message: 11/01/2006, 10h27
  3. [VB6] Durée d'exécution d'une procédure
    Par Peltchag dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 17/10/2005, 14h51
  4. Réponses: 15
    Dernier message: 08/07/2004, 08h20
  5. [ArchiveBuilder][JavaMail] exécution impossible...
    Par Gorthal dans le forum JBuilder
    Réponses: 7
    Dernier message: 10/01/2003, 09h12

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