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 :

Piloter des procédures avec les composants DOA


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 237
    Points : 150
    Points
    150
    Par défaut Piloter des procédures avec les composants DOA
    Bonjour

    Par obligation professionnel, mais aussi par curiosité je suis obligé de me remettre à PL/SQL,
    Je dois piloter des procédures avec les composants DOA de Allroundautomation,
    j’ai fais ceci il y à 8 bonnes années et je n’ai plus trop les reflexes en tête

    J’ai écris une procédure, créé la table qui va avec et (un exemple trouvé chez Allroundautomation), tous fonctionne bien du côté pl/sql

    La procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     CREATE OR REPLACE PROCEDURE Augmentation_1
         (
           Numemp IN DOA_EMP.empno%Type -- numéro de l'employé
          ,Pourcent IN NUMBER       -- pourcentage d'augmentation
         ) IS
        BEGIN
          -- augmentation de l'employé
          Update DOA_EMP Set sal = 1 + sal * Pourcent
          --dbms_output.put_line( 'Après augmentation ' || To_char( Emp.empno ))
          Where empno = Numemp ;
       END;
    Le code pour l’appeler qui est OK aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Declare
          LR$Emp DOA_EMP%Rowtype ;
        Begin   
          --Select * Into LR$Emp From DOA_EMP Where empno = 7369 ; -- lecture ligne avant mise à jour
          --dbms_output.put_line( 'Avant augmentation ' || To_char( LR$Emp.empno )
          --  || ' ' || LR$EMp.ename || ' --> ' || To_char( LR$Emp.sal ) ) ;
          --Augmentation_1( 7369, 1.5 ) ; -- appel de la procédure
          Augmentation_2( 7369, 1.5 ) ; -- appel de la procédure
          --Select * Into LR$Emp From DOA_EMP Where empno = 7369 ; -- lecture ligne après mise à jour 
          --dbms_output.put_line( 'Après augmentation ' || To_char( LR$Emp.empno )
          -- || ' ' || LR$EMp.ename || ' --> ' || To_char( LR$Emp.sal ) ) ;
      End ;
    Mais je n’arrive pas à l’appeler avec Delphi et les composants OracleDataSet
    Je dois passer deux variables :
    Numemp est un integer
    Percent est un float

    Qui pourrai me mettre sur la voie ?

    Merci par avance

    Henri

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Je ne connais pas DOA mais en général on utilise ParamByName, tient on a bcp évoqué ces composants
    TOracleDataset et Procedure Stockée
    Sinon, j'ai rarement vu une documentation aussi peu claire, fallait déclarer une otPLSQLString via un SetVariable ... lol, ils pouvaient pas faire un TOracleStoreProc ...
    Delphi & DOA - Surtout les bases !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 237
    Points : 150
    Points
    150
    Par défaut je n’avais pas écrit ces script sur le bon schéma
    Bonsoir,

    Voici comment j’ai réussi à faire fonctionner ma procédure :
    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
     with OracleQuery1 do
       begin
         clear ;
         SQL.Add('Begin');
         SQL.Add(' Augmentation_1(:numemp,: Pourcent);');
         SQL.Add('End;');
         DeclareVariable('numemp', otInteger);
         SetVariable('numemp', 7934);
         DeclareVariable('Pourcent', otFloat);
         SetVariable('Pourcent', 1.2);
         execute ;
         OracleSession1.Commit ;
         OracleDataSet2.Refresh ;
        End;
      end;
    Et voici pour ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      with OracleQuery2 do
       begin
         clear ;
         SQL.Add('Begin');
         SQL.Add(' Select F_Augmentation(7900, 1.2) into :retour from dual;');
         SQL.Add('End;');
         DeclareVariable('retour', otInteger);
         execute ;
         showmessage(inttostr(GetVariable('retour')));
        End;
    J’a rencontré quelques problèmes car au départ je n’avais pas écrit ces script sur le bon schéma, je suis pas un pro de l'administration oracle
    A partir de là tous est OK, je n'ai plus qu'a me metttre au pl_sql,

    Cordialement,
    Henri

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/03/2012, 09h38
  2. Gestion des transactions avec les composants DOA
    Par lper dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/12/2008, 16h06
  3. Réponses: 1
    Dernier message: 31/07/2008, 10h42
  4. Linux à des problèmes avec les brevets
    Par bilb0t dans le forum Linux
    Réponses: 15
    Dernier message: 21/11/2006, 13h54
  5. [Eclipse] [VE] Créer des menus avec les classes SWT de VE
    Par jbcorens dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 30/08/2005, 12h25

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