1. #1
    Membre du Club
    Inscrit en
    juillet 2009
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : juillet 2009
    Messages : 48
    Points : 42
    Points
    42

    Par défaut Utilisation séquence auto incrément

    Salut,

    j'ai créé une séquence AUTO-INCREMENT_ID dans ma BDD à partir de Oracle Sql Developer qui va me permettre de faire des auto incréments des Id de mes tables avec cette structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE SEQUENCE AUTO_INCREMENT_ID
      START WITH 1 
      MAXVALUE 999999 
      MINVALUE 1 
      NOCYCLE 
      NOCACHE 
      NOORDER;
    En suite j'ai un block de données qui est lié à la table PROFIL qui a pour nom PROFIL, que j'aimerai faire un enregistrement dessus.
    A partir d'un Trigger WHEN_BUTTON_PRESSED, j'ai mis le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    BEGIN 
      GO_BLOCK('profil');
      INSERT INTO profil (id,intitule, application_id) VALUES (AUTO_INCREMENT_ID.NextVal, :PROFIL.intitule, :PROFIL.application_id);
    END;
    et quand j'execute le bouton, rien ne se passe même pas un message d'erreur et la BDD est aussi vide.
    J'aimerai savoir qu'est-ce qui n'a pas marché. Merci d'avance

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    juillet 2003
    Messages
    4 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : juillet 2003
    Messages : 4 107
    Points : 6 543
    Points
    6 543
    Billets dans le blog
    3

    Par défaut

    Ne pas confondre le SQL qui s'exécute dans la base et celui fait pour Forms

    L'instruction Go_block est une instruction Forms
    INSERT est une instruction SQL

    Concrètement :
    GO_BLOCK('profil'); => Dans l'appli forms, le curseur va dans le block PROFIL
    INSERT INTO profil (id,intitule, application_id) VALUES (AUTO_INCREMENT_ID.NextVal, ROFIL.intitule, ROFIL.application_id); => Tu insères en base dans la table Profil des valeurs (mais sans commiter)
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB

  3. #3
    Membre du Club
    Inscrit en
    juillet 2009
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : juillet 2009
    Messages : 48
    Points : 42
    Points
    42

    Par défaut

    Citation Envoyé par McM Voir le message
    Concrètement :
    GO_BLOCK('profil'); => Dans l'appli forms, le curseur va dans le block PROFIL
    INSERT INTO profil (id,intitule, application_id) VALUES (AUTO_INCREMENT_ID.NextVal, ROFIL.intitule, ROFIL.application_id); => Tu insères en base dans la table Profil des valeurs (mais sans commiter)
    quand je fait un COMMIT, l'enregistrement s'effectue. Mais comme Id est auto incrément alors je l'ai rendu invisible dans le Block, et là j'ai les messages d'erreur: FRM-40202: Le champ doit être renségné. et FRM-40222: Echec de validation sur élément désactivé 'PROFIL.ID'.
    Comment faire pour caché le champ ID à l'utilisateur et enregistrer avec le bouton sans erreur?
    Merci.

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Consultant ERP
    Inscrit en
    février 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : février 2018
    Messages : 7
    Points : 8
    Points
    8

    Par défaut

    Salut,
    ça fait longtemps que je n'ai plus fait de Forms mais je crois qu'il faut que tu alimentes tes champs dans le panneau, tu ne dois pas faire d'INSERT sql directement, c'est l'enregistrement au niveau du panneau qui ira insérer tes lignes en table.

  5. #5
    Membre du Club
    Inscrit en
    juillet 2009
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : juillet 2009
    Messages : 48
    Points : 42
    Points
    42

    Par défaut

    Je ne comprends pas quand tu me dis d'alimenter mes champs dans le panneau. De quel panneau il s'agit STP?

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Consultant ERP
    Inscrit en
    février 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : février 2018
    Messages : 7
    Points : 8
    Points
    8

    Par défaut

    Du panneau Forms sur lequel tu travailles !
    Chaque élément du panneau est susceptible de recevoir une valeur.

  7. #7
    Membre du Club
    Inscrit en
    juillet 2009
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : juillet 2009
    Messages : 48
    Points : 42
    Points
    42

    Par défaut

    Si je comprend bien, je dois, pour chaque champ de ma table, indiquer la valeur du champ du formulaire correspondant et faire simplement un commit après ?

  8. #8
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet
    Inscrit en
    juin 2007
    Messages
    1 269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : juin 2007
    Messages : 1 269
    Points : 2 101
    Points
    2 101

    Par défaut

    Il faut mettre la propriété du block "Valeur de retour dml" (section base de données évoluées) ("DML returning value" en anglais) à vrai

    DML Returning Value Property

    Description


    Specifies whether Forms should use new or old behavior when updating client-side data with changed values after a database update or insert. A Yes setting for this property selects new behavior (new as of Release 6). A No setting selects old behavior (behavior of Release 5 and earlier).

    A database update or insert action may initiate server-side triggers that cause alterations or additional changes in the data. In Release 6, when using an Oracle8 database server, Forms uses the DML Returning clause to immediately bring back any such changes. When this property is set to Yes, Forms will automatically update the client-side version of the data, and the user will not need to re-query the database to obtain the changed values.

    When this property is set to No, Forms will not automatically update the client-side version of the data. (This is its pre-Release 6 behavior.) In this case, if the user subsequently tries to update a row whose values were altered on the server side, the user receives a warning message and is asked to re-query to obtain the latest values. This No setting is available as a compatibility option.

    Forms automatically uses DML Returning Value for update statements when Oracle Forms is running against an Oracle database for blocks that are based on a partition table. However, this only applies to the blocks that have ROWID selected, i.e. key mode is automatic/unique. If the ENABLE ROW MOVEMENT clause is not set, Oracle Forms returns the Oracle Database error ORA-14402: updating partition key column would cause a partition change and the Forms update fails.

    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/08/2014, 14h44
  2. Séquences pour auto incrémentation?
    Par Yassine2006 dans le forum Oracle
    Réponses: 3
    Dernier message: 15/03/2007, 07h58
  3. Dernière clé auto incrémenté ?
    Par WOLO Laurent dans le forum MS SQL-Server
    Réponses: 7
    Dernier message: 15/11/2003, 10h41
  4. [CODE] auto incrémentation ?
    Par Roi dans le forum MS SQL-Server
    Réponses: 5
    Dernier message: 25/09/2003, 15h09
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

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