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 :

Affectation écran


Sujet :

Forms Oracle

  1. #1
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Par défaut [Résolu]Affectation écran
    Bonjour, j'ai un projet qui utilise du forms et je ne comprends pas tout.
    Je développe:
    j'ai un écran qui va chercher des données dans une base pour mettre dans différentes colonnes. Dans une de ces colonnes j'ai un nombre (X) d'affiché d'une longueur de 10 et dans une autre colonne un alphanumérique (Y) de longueur de 2.
    Mon probleme est que si le code alpha (Y) correspond a une certaine categorie référencé dans une autre table, le nombre (X) peut être soit de longueur 10 ou 8 en complétant par des zéros si ce n'est pas assez long.

    Ex: Y : 8V => correspond à la catégorie S2
    X : 48491196 => ajouter des zéros pour avoir une longueur de 10
    =>0048491196.

    Y : CD => correspond à la catégorie C39
    X : 484996 => ajouter des zéros pour avoir une longueur de 8
    =>00484996.

    Si quelqu'un voit ce que je veux expliquer et s'il sait comment je dois m'y prendre, je prends avec plaisir

  2. #2
    Expert confirmé
    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
    Par défaut
    Je pense que, dans votre cas, vous devez adapter le masque de format du numérique en fonction de Y. Malheureusement, le masque de format est attribué à la colonne entière et ne peux varier d'une ligne à l'autre.
    Plus simple serait d'utiliser un TEXT ITEM de type CHAR et d'ajouter les 0 dans un trigger When-New-Record-Instance.

  3. #3
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Par défaut
    J'ai fait le trigger avec ca sans m'occuper des changements de catégorie mais si je le met en declencheur sur l'élément du bloc ou de l'élément ca ne change rien.
    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
    BEGIN
    if   ((LENGTH (:TBCOLIS_SDFC.NUMREC)) = 0) then
            :TBCOLIS_SDFC.NUMREC := '0000000000';
              else if  ((LENGTH (:TBCOLIS_SDFC.NUMREC)) = 1) then
                         :TBCOLIS_SDFC.NUMREC := '000000000' || :TBCOLIS_SDFC.NUMREC;
              else if  ((LENGTH (:TBCOLIS_SDFC.NUMREC)) = 2) then
                           :TBCOLIS_SDFC.NUMREC := '00000000' || :TBCOLIS_SDFC.NUMREC;
                  else if  ((LENGTH (:TBCOLIS_SDFC.NUMREC)) = 3) then
                             :TBCOLIS_SDFC.NUMREC := '0000000' || :TBCOLIS_SDFC.NUMREC;
                    else if  ((LENGTH (:TBCOLIS_SDFC.NUMREC)) = 4) then
                             :TBCOLIS_SDFC.NUMREC := '000000' || :TBCOLIS_SDFC.NUMREC;
                      else if  ((LENGTH (:TBCOLIS_SDFC.NUMREC)) = 5) then
                                 :TBCOLIS_SDFC.NUMREC := '00000' || :TBCOLIS_SDFC.NUMREC;
                        else if  ((LENGTH (:TBCOLIS_SDFC.NUMREC)) = 6) then
                                   :TBCOLIS_SDFC.NUMREC := '0000' || :TBCOLIS_SDFC.NUMREC;
                        else if  ((LENGTH (:TBCOLIS_SDFC.NUMREC)) = 7) then
                                     :TBCOLIS_SDFC.NUMREC := '000' || :TBCOLIS_SDFC.NUMREC;
                            else if  ((LENGTH (:TBCOLIS_SDFC.NUMREC)) = 8) then
                                       :TBCOLIS_SDFC.NUMREC := '00' || :TBCOLIS_SDFC.NUMREC;
                               else if  ((LENGTH (:TBCOLIS_SDFC.NUMREC)) = 9) then
                                         :TBCOLIS_SDFC.NUMREC := '0' || :TBCOLIS_SDFC.NUMREC;
                                else if  ((LENGTH (:TBCOLIS_SDFC.NUMREC)) = 10) then
                                           :TBCOLIS_SDFC.NUMREC := :TBCOLIS_SDFC.NUMREC;
                                end if;
                            end if;
                             end if;
                          end if;
                      end if;
                    end if;
                    end if;
                  end if;
              end if;
            end if;
        end if;      
    END;

  4. #4
    Invité
    Invité(e)
    Par défaut
    tu devrais regarder le elsif à la place du else if.
    et regarde aussi la balise de code de l'interface du forum qui est représenté par #...

  5. #5
    Expert confirmé
    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
    Par défaut
    Et puis vous pourriez réaliser la même chose en une unique isntruction en utilisant l'instruction LPAD()
    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
    SQL> set serveroutput on
    SQL> 
    SQL> DECLARE
      2    v VARCHAR2(20);
      3  BEGIN
      4    FOR i IN 3 .. 6 LOOP
      5      v := LPAD(TO_CHAR(i),i,'0');
      6   DBMS_OUTPUT.PUT_LINE(v);
      7    END LOOP;
      8  END;
      9  
     10  /
    003
    0004
    00005
    000006
     
    Procédure PL/SQL terminée avec succès.

  6. #6
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Par défaut
    merci pour ces compléments, surtout le LPAD()
    mon problème est toujours là mais je sens que ça va avancer
    Si mets donc dans WHEN-NEW-ITEM-INSTANCE juste un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    :TBCOLIS_SDFC.NUMREC := LPAD(:TBCOLIS_SDFC.NUMREC,10,'0');
    dans toute la colonne cette fonction devrait remplacer un Format dans les propriétés ?
    J'ai essayé (au petit bohneur la chance) de mettre le trigger en déclancheur de mon bloc et en déclencheur de l'élément mais rien ne change.

  7. #7
    Expert confirmé
    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
    Par défaut
    Placez ce code dans les triggers When-New-Record-Instance et Post-Query

  8. #8
    Expert confirmé
    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
    Par défaut
    dans votre exemple, vous faites un LPAD sur l'item de base qui est numérique, raison pour laquelle cela ne marche pas. Il faut créer un item de type CHAR et cacher le numérique (displayed : false)

  9. #9
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Par défaut
    merci j'arrive à trouver mon résultat maintenant.

    Bonne soirée

  10. #10
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Par défaut
    Bonjour me revoilà avec un probleme causé par la résolution de mon probleme précédent.
    Mon élément non modifiable où on ajoute des zéros fait parti d'un bloc de données avec source de données d'interrogation. Au premier affichage ça fonctionne bien mais lorsque que je fais un tri ou un filtrage sur mon écran (fonctions qui existaient avant mes modifications) j'ai le message
    "CAUTION Do zou want to save the changes you have made? "
    Je suppose qu'il me dit ça parsqu'il croit que j'ai modifié un champ et le compare avec la table, comment puis-je contourner ce message ?
    Merci d'avance.

  11. #11
    Expert confirmé
    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
    Par défaut
    Lorsque vous renseignez cet item non basé, ajoutez l'instruction suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set_Item_Property('blk.item', ITEM_IS_VALID, PROPERTY_TRUE);

  12. #12
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Par défaut
    toujours le même probleme,
    récap:
    dans le bloc de données TBCOLIS_SDFC, les éléments sont pris dans la base de données.
    Sur ce bloc de données j'ai mis un déclencheur POST QUERY avec dedans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    declare
    	codty_cab2 VARCHAR(3);
    begin
    	select codty_cab into codty_cab2
    	   from tbtrafic
    	   where typ_trafic = :typ_trafic;
    	if (codty_cab2 = 'C39') then
          :TBCOLIS_SDFC.NUMREC := LPAD(:TBCOLIS_SDFC.NUMREC,8,'0');
    	else
    		  :TBCOLIS_SDFC.NUMREC := LPAD(:TBCOLIS_SDFC.NUMREC,10,'0');
    	end if;
    end;
    Set_Item_Property('TBCOLIS_SDFC.NUMREC', ITEM_IS_VALID, PROPERTY_TRUE);
    Lorsque les données s'affichent une premiere fois, ça fonctionne mais dès que je tri ou filtre une seconde fois ca me met le message.

  13. #13
    Expert confirmé
    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
    Par défaut
    Bon, dans ce cas, validez tout l'enregistrement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set_Record_Property(:System.Cursor_Record , :SYSTEM.CURRENT_BLOCK, STATUS, QUERY_STATUS);

  14. #14
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Par défaut
    avec la dernière solution j'arrive a ne plus avoir le message mais pour le reste du fonctionnement ça ne fonctionne plus comme avant.
    Je pense que le fonctionne dans mon cas mais je ne sais pas quoi mettre exactement à l'interieur pour mettre le champ genre à "Unchanged" ou quelque chose dans le genre.

  15. #15
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Par défaut
    Mon problème est résolu,
    dans mon post-query j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET_RECORD_PROPERTY(Get_Block_Property( 'TBCOLIS_SDFC', CURRENT_RECORD), 'TBCOLIS_SDFC', STATUS, QUERY_STATUS);
    et dans le pre update
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IF :SYSTEM.RECORD_STATUS = 'CHANGED'
      THEN
    Merci de votre aide

Discussions similaires

  1. Comment affecter une couleur de fond à tous les écrans ou form ou list ?
    Par andrianiaina dans le forum Développement Mobile en Java
    Réponses: 0
    Dernier message: 05/05/2011, 15h47
  2. [PPT-2007] comment affecter une macro "ouvrir en mode plein écran" à un diaporama PPSX?
    Par jerky1 dans le forum VBA PowerPoint
    Réponses: 3
    Dernier message: 12/04/2011, 12h06
  3. Réponses: 17
    Dernier message: 17/10/2002, 20h06
  4. plein écran
    Par patapetz dans le forum OpenGL
    Réponses: 9
    Dernier message: 21/08/2002, 14h15
  5. recuperer la résolution de l'écran
    Par florent dans le forum C++Builder
    Réponses: 11
    Dernier message: 07/06/2002, 15h01

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