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 faire un clear_block sans incrément la sequence


Sujet :

Forms Oracle

  1. #1
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 21
    Par défaut Comment faire un clear_block sans incrément la sequence
    Bonjour,

    Merci d'avance à tous les experts.

    Oracle 10G.
    Forms 6i.

    J'ai un block non-basé (pour la recherche) et un 2ème block basé (TABLE RESULTATS).

    Quand je fait clic sur un bouton VIDER au niv. du block (RECHERCHE), afin de vider les items au niv. de recherche, et le clear_block (RESULTATS).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    GO_BLOCK('RESULTATS');
    clear_block;
    GO_BLOCK('RECHERCHE');
    clear_block;
    mon souci, c'est que, à chaque fois que je fait VIDER, le numéro de séquence du block basé est incrémenté.

    Comment faire pour éviter l'incrémentation de la séquence, tout en vidant le block.


    J'espère fort que j'ai présenté assez simple.


    Sincèrement votre.
    MERCI.

  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
    Retirer la séquence de la valeur initiale de l'item, et la renseigner dans un trigger PRE-INSERT par exemple.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 21
    Par défaut
    Citation Envoyé par SheikYerbouti Voir le message
    Retirer la séquence de la valeur initiale de l'item, et la renseigner dans un trigger PRE-INSERT par exemple.
    Je vais essayer tout de suite.

    Merci beaucoup.

  4. #4
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 21
    Par défaut
    Je vous remercie de votre réponse.

    Je vous confirme que ça a fonctionnée.

    En outre, j'ai une petite quetion, concernant la séquence toujours.

    C'est que, en mettant dans le pre-insert :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select seq_ref_champ.nextval into :block.champ from dual;
    Et aussi, dans le bouton AJOUTER :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    go_block('nom_block');
    last_record;
    create_record;
    Et bien évidement dans l'evenement on-insert :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	insert into TABLE values (:block.champ,
    :block.champ1,:block.champ2,:block.champ3);

    C'est que, dans les enregistrements que j'enregistre au niv. de TABLE, les numéros de séquence sont incrémenté deux fois, càd : (1,text1,text1,text1) puis (3,text2,text2,text2) ensuite (5,text3,text3,text3).

    Alors sachant que, dans ma SEQ : j'ai personnalisé l'incrémentation by 1.


    Merci infiniment.

  5. #5
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 21
    Par défaut
    bonjour,

    Je rajoute que, même en changeant le code du pre-insert, et en le mettant dans le code du bouton AJOUTER après le create_record, ben, ça donne la même chose, càd : l'incrémantion de la séquence est faite, en deux fois.


    MERCI.

  6. #6
    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
    Il doit y avoir autre chose qui incrémenta cette séquence.
    Sinon, pourquoi un trigger ON-INSERT ? pourquoi ne pas laisser Forms faire le boulot ?

  7. #7
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 21
    Par défaut
    Citation Envoyé par SheikYerbouti Voir le message
    Il doit y avoir autre chose qui incrémenta cette séquence.
    Sinon, pourquoi un trigger ON-INSERT ? pourquoi ne pas laisser Forms faire le boulot ?

    Je suis entièrement d'accord avec vous(sur le on-insert), sachant que j'eesaye de présenter le souci sous un petit exemple, alors, dans le on-insert, je dois absolument faire exécuter des tests à l'avance en gérat les messages de forms.

    Mais, je reviens au sujet, c'est j'ai essayé même de créer un nouveau module, contenant un seul block de données basé, en intégrant le nextval de la séquence dans le pre-insert seulement (pas de on-insert), et que, j'en ai toujours la sequence incrémentée par 2.

    Donc, logiquement, le souci est dans la séquence utilisée pour générer le numéro !! (je crois).

    Du fait, voilà le sql de la séquence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Create sequence GFM.SEQ_CODE_AUTORISATION
      Increment by 1
      MinValue     1
      MaxValue     100000
      NoCycle
      NoOrder
      Cache 20;
    et le trigger de la séquence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE OR REPLACE TRIGGER GFM.SEQ_CODE_AUTORISATION
    BEFORE INSERT ON GFM.AUTORISATIONS
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROW
    begin select SEQ_CODE_AUTORISATION.nextval into
    :new.CODE_AUTORISATION from dual;
    end;
    /

    En outre, on ré-exécutant le formulaire aprés avoir supprimer le trigger de la séquence, ça marche mnt.

    Alors, à quoi sert les triggers crées sur la BDD ? du fait, que je viens de trouver qu'il y a pour chaque séquence d'une table, un trigger portant le même nom.


    Merci mille et une fois pour votre soutien et aide.

  8. #8
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 21
    Par défaut
    Merci chef,

    C'est résolu en supprimant tous les triggers, qui fesait l'incrémentation de la séquence en plus+1 de la séquence.

    alors dois-je enlever les on-insert et sinon, quel est le l'avantage de les garder dans la cas contraire.


    Merci.

  9. #9
    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 le bloc est basé, Forms gère automatiquement la mise à jour de la base (Insert,Update,Delete).
    Le ON-INSERT sert à contourner le comportement par défaut afin d'exécuter un traitement de remplacement. Il est très rarement utilisé.

  10. #10
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Le ON-INSERT, c'est mal !
    Pour info, il existe le CLEAR_BLOCK(NO_VALIDATE) !

  11. #11
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 21
    Par défaut
    Citation Envoyé par Garuda Voir le message
    Le ON-INSERT, c'est mal !
    Pour info, il existe le CLEAR_BLOCK(NO_VALIDATE) !
    Merci pour la réponse,

    Je rappel que le but est de vider deux blocks (un basé et l'autre ne l'est pas)

    mais, le clear_block(no_validate), incrémente la séquence meme.

    donc, du fait, j'ai opté pour la solution de rensigner la sequence on pre-insert.

    En outre, le on-insert, je l'ai utilisé pour vérifier sur autres tables et si c'est valide, j'enregistre sur la table et en meme temps sur la table du block basé. Sinon, si la condition n'est pas vérifiée, ben, j'annule le insert de la table du block basé...


    Merci.

  12. #12
    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
    Les diverses opération sur d'autres tables peuvent également se faire dans les triggers PRE-INSERT et POST-INSERT.

Discussions similaires

  1. Comment faire un Iframe sans la barre horizontale ?
    Par Alexandrebox dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 01/04/2007, 23h16
  2. Réponses: 4
    Dernier message: 28/07/2006, 11h26
  3. Réponses: 14
    Dernier message: 27/07/2006, 14h40
  4. [Message] Comment faire un prompteur sans bruit
    Par Kylen dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 26/08/2005, 11h15
  5. [help!] comment faire une séquence ki incrémente ....
    Par romtrash dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 19/04/2005, 18h52

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