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

Forms Oracle Discussion :

comment creer une progress bar


Sujet :

Forms Oracle

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2008
    Messages : 44
    Points : 38
    Points
    38
    Par défaut comment creer une progress bar
    bonjour,
    j'ai crée une progress bar pour le traitement d'une procedure stocké en base qui prend bq de temps j'ai precedé ainsi:
    j'ai crée une procedure en base :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    create or replace procedure Progress_Bar 
    As
       rindex pls_integer := -1;
       slno   pls_integer;
    Begin
      -----------------------------------------------------
      --  procedure that does nothing else than waiting  --
      --  to illustrate the ProgressBar Forms sample     --
      -----------------------------------------------------
       dbms_application_info.set_session_longops(
         RINDEX      => rindex
        ,SLNO        => slno
        ,OP_NAME     => 'PROGRESS_BAR'
        ,SOFAR       => 0
        ,TOTALWORK   => 100
       );
       --  simulating the task progress  --
       For i IN 1..100 loop
         DBMS_LOCK.SLEEP(.3);
         dbms_application_info.set_session_longops(
           RINDEX      => rindex
          ,SLNO        => slno
          ,OP_NAME     => 'PROGRESS_BAR'
          ,SOFAR       => i
          ,TOTALWORK   => 100
         );
       End loop;
    End;apres au niveau forms j'ai mi le code suivant:
    Declare
      v_jobname  Varchar2(30) := 'PROGRESS_BAR_JOB' ;
      v_jobid    Number := 12345 ;
      v_percent  Number :=  0 ;
      v_end      Exception ;
      v_version  Number := 9 ;
      v_nb       Pls_integer ;
      v_pass     Pls_integer := 0 ;	
    begin 
      -- Lancement de la procédure par le package dbms_job pour la version 9i --
      If v_version = 9 Then
        dbms_job.isubmit(v_jobid,'Progress_Bar;',sysdate,null);
        forms_ddl('commit') ;
      Else
      -- Lancement de la procédure par le package dbms_scheduler pour la version 10g --
      dbms_scheduler.create_job(
        job_name   => v_jobname
       ,job_type   => 'stored_procedure'
       ,job_action => 'Progress_Bar'
       ,start_date => SYSDATE
       ,enabled    => TRUE
      );
      End if ;
      
      -- le job tourne ? --
      Loop 
         If v_version = 9 Then
           Select count(job)
           Into   v_nb 
           From   user_jobs
           Where  job= v_jobid 
           And    total_time!=0;
         Else
           Select count(*) 
           Into   v_nb 
           From   USER_SCHEDULER_JOBS 
           Where  JOB_NAME = v_jobname;
         End if ;
         
         v_pass := v_pass + 1 ;
         If v_pass > 100 Then
         	  -- le job ne se lance pas --
         	  message('Problème de lancement du job',acknowledge);
         	  Raise Form_Trigger_Failure ;
         End if ;
         exit when v_nb > 0  ;
         dbms_lock.sleep(.2);
      End loop ;
      
      set_item_property('blo_progress.progressbar', width, 0);
      v_percent :=0;
      
      -- pour suivre la progression de l'éxecution de procedure --
      Loop    
          
          Exit when v_percent >= 100;
          Select  (sofar / totalwork) * 100
          Into    v_percent
          From    v$session_longops
          Where   opname = 'PROGRESS_BAR' and sofar < totalwork;
    		   
          :blo_progress.progressbar:= v_percent||'%';
          set_item_property('blo_progress.progressbar',width, round( v_percent*2,2));
          synchronize;
         
      End loop;
    
      raise v_end ;
      
    Exception
       When NO_DATA_FOUND then
          set_item_property('blo_progress.progressbar', width, 200);
          :blo_progress.progressbar:= '100%';
          raise v_end ;
       When TOO_MANY_ROWS then
          raise v_end ;
       When v_end then
          If v_version = 10 Then
            DBMS_SCHEDULER.drop_job (job_name => v_jobname,FORCE=> true) ;   
          End if ;
       When Others then
          If v_version = 10 Then
            DBMS_SCHEDULER.drop_job (job_name => v_jobname,FORCE=> true) ;   
          End if ;
    End; 
    j'ai pris ça du lien suivant:
    http://schelabi.developpez.com/progressbar/

    ma procedure s'apel calcul_score ,le probleme comment synchriniser ce code avec ma procedure? ou je vé faire des modification pour le personaliser selon mon besoin? merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    C'est la procédure stockée en base qui gère l'incrémentation du pourcentage. Quel est votre problème ?

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2008
    Messages : 44
    Points : 38
    Points
    38
    Par défaut
    la progress barr se termine avant mon traitement ,il n'ya pas de synchronisation

  4. #4
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Avez-vous d'abord essayé la procédure telle que donnée dans l'exemple ?

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2008
    Messages : 44
    Points : 38
    Points
    38
    Par défaut
    oui en fait j'ai crée la procedure de l'exemple et ma propre procedure qui fé tt le traitement :calcul_score

  6. #6
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Oui, mais on ne peut pas deviner ce que fait votre procédure...

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2008
    Messages : 44
    Points : 38
    Points
    38
    Par défaut
    voila le contenu de ma procedure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    create or replace PROCEDURE calcul_score AS
     
     
    begin
      UPDATE score_societe 
    SET s1 = calcul_s1(centre, rc, annee), 
        s2 = calcul_s2(centre, rc, annee),
        s3 = calcul_s3(centre, rc, annee),
        s4 = calcul_s4(centre, rc, annee),
        s5 = calcul_s5(centre, rc, annee), 
        s6 = calcul_s6(centre, rc, annee);
        commit;
      END;

  8. #8
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Mais vous ne mettez rien à jour dans votre procédure. Je crois que vous n'avez pas compris l'article. C'est la procédure stockée qui incrémente le compteur. Relisez-le.

    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
    28
    29
    create or replace procedure Progress_Bar 
    As
       rindex pls_integer := -1;
       slno   pls_integer;
    Begin
      -----------------------------------------------------
      --  procedure that does nothing else than waiting  --
      --  to illustrate the ProgressBar Forms sample     --
      -----------------------------------------------------
       dbms_application_info.set_session_longops(
         RINDEX      => rindex
        ,SLNO        => slno
        ,OP_NAME     => 'PROGRESS_BAR'
        ,SOFAR       => 0
        ,TOTALWORK   => 100
       );
       --  simulating the task progress  --
       For i IN 1..100 loop
         DBMS_LOCK.SLEEP(.3);
         dbms_application_info.set_session_longops(
           RINDEX      => rindex
          ,SLNO        => slno
          ,OP_NAME     => 'PROGRESS_BAR'
          ,SOFAR       => i
          ,TOTALWORK   => 100
         );
    
       End loop;
    End;

Discussions similaires

  1. Comment fonctionne une Progress Bar
    Par loulag07 dans le forum Débuter
    Réponses: 2
    Dernier message: 10/01/2008, 15h37
  2. [winAPI] Comment créer une progress bar ownerdraw ?
    Par kidpaddle2 dans le forum Windows
    Réponses: 1
    Dernier message: 01/08/2006, 11h02
  3. Réponses: 3
    Dernier message: 19/07/2006, 14h28
  4. Comment creer une bande bootable ?
    Par sdeb dans le forum Administration système
    Réponses: 7
    Dernier message: 13/01/2004, 17h26
  5. [TP]comment creer une disquette bootable (les fichiers)
    Par ludovic5532 dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 25/10/2003, 18h46

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