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 :

[Forms 6i] : update sur vue


Sujet :

Forms Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Février 2004
    Messages : 118
    Par défaut [Forms 6i] : update sur vue
    Bonjour à tous

    Ca fait longtemps que je n'ai pas fais appels à vos lumières pour un problème en forms.

    Version forms : 6.0.8.27.0
    Version Base : 9.2.0.4

    Je voudrais faire un update sur une vue à travers forms. J'ai mis en place des triggers sur la base en insert, update et delete avec la fonction instead of qui envoie l'instruction sur la bonne table.

    Script de la table gamme_article :
    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
     
    ALTER TABLE OPS$PROJET.GAMME_ARTICLE
     DROP PRIMARY KEY CASCADE;
     
    DROP TABLE OPS$PROJET.GAMME_ARTICLE CASCADE CONSTRAINTS;
     
    CREATE TABLE OPS$PROJET.GAMME_ARTICLE
    (
      SAISON    VARCHAR2(5 BYTE)                    NOT NULL,
      SECTEUR   VARCHAR2(5 BYTE)                    NOT NULL,
      RGP_PAYS  VARCHAR2(5 BYTE)                    NOT NULL,
      ART       NUMBER                              NOT NULL,
      GAMME     VARCHAR2(5 BYTE)                    NOT NULL,
      DATM      DATE                                NOT NULL,
      DATC      DATE                                NOT NULL,
      USERM     VARCHAR2(20 BYTE)                   NOT NULL,
      USERC     VARCHAR2(20 BYTE)                   NOT NULL,
      IDLIG     INTEGER                             NOT NULL
    )
    TABLESPACE TMED
    PCTUSED    40
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          5M
                NEXT             5M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                FREELISTS        1
                FREELIST GROUPS  1
                BUFFER_POOL      DEFAULT
               )
    LOGGING 
    NOCOMPRESS 
    NOCACHE
    NOPARALLEL
    NOMONITORING;
     
    COMMENT ON TABLE OPS$PROJET.GAMME_ARTICLE IS 'Gestion des Gamma Article par Saison,segment,pays)';
     
     
    CREATE UNIQUE INDEX OPS$PROJET.K_GAMME_ARTICLE ON OPS$PROJET.GAMME_ARTICLE
    (IDLIG)
    LOGGING
    TABLESPACE TSMALL
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          512K
                NEXT             512K
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                FREELISTS        1
                FREELIST GROUPS  1
                BUFFER_POOL      DEFAULT
               )
    NOPARALLEL;
     
     
    CREATE UNIQUE INDEX OPS$PROJET.K2_GAMME_ARTICLE ON OPS$PROJET.GAMME_ARTICLE
    (SAISON, SECTEUR, RGP_PAYS, ART, GAMME)
    LOGGING
    TABLESPACE TSMALL
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          512K
                NEXT             512K
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                FREELISTS        1
                FREELIST GROUPS  1
                BUFFER_POOL      DEFAULT
               )
    NOPARALLEL;
     
    ALTER TABLE OPS$PROJET.GAMME_ARTICLE ADD (
      CONSTRAINT K_GAMME_ARTICLE
     PRIMARY KEY
     (IDLIG)
        USING INDEX 
        TABLESPACE TSMALL
        PCTFREE    10
        INITRANS   2
        MAXTRANS   255
        STORAGE    (
                    INITIAL          512K
                    NEXT             512K
                    MINEXTENTS       1
                    MAXEXTENTS       UNLIMITED
                    PCTINCREASE      0
                    FREELISTS        1
                    FREELIST GROUPS  1
                   ));
     
    ALTER TABLE OPS$PROJET.GAMME_ARTICLE ADD (
      CONSTRAINT CR_GAMME_ARTICLE_1 
     FOREIGN KEY (ART) 
     REFERENCES OPS$PROJET.ARTNEW (ART)
        ON DELETE CASCADE);
     
    GRANT ALTER, DELETE, INSERT, SELECT, UPDATE, ON COMMIT REFRESH, QUERY REWRITE, DEBUG, FLASHBACK ON OPS$PROJET.GAMME_ARTICLE TO MINIER;
    Code la vue vgamme_article. C'est cette vue que je veux modifier dans forms
    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
    DROP VIEW OPS$PROJET.VGAMME_ARTICLE;
     
    /* Formatted on 21/05/2010 09:30:09 (QP5 v5.115.810.9015) */
    CREATE OR REPLACE FORCE VIEW OPS$PROJET.VGAMME_ARTICLE
    (
       ART,
       BNB,
       BCT,
       HGA,
       SAISON,
       RGP_PAYS,
       GAMME,
       SECTEUR,
       IDLIG
    )
    AS
       SELECT   a.art,
                a.bnb,
                a.bct,
                a.hga,
                g.saison,
                g.rgp_pays,
                g.gamme,
                g.secteur,
                g.idlig
         FROM   gamme_article g, artnew a
        WHERE   a.art = a.rgpart AND a.hga IN (0, 6, 7) AND g.art(+) = a.art;
     
     
    DROP TRIGGER OPS$PROJET.T_VGAMME_ARTICLE_DEL;
     
    CREATE OR REPLACE TRIGGER OPS$PROJET.t_vgamme_article_del
    instead of delete
    ON OPS$PROJET.VGAMME_ARTICLE for each row
    begin
    --
    -- $TRIGGER/gamme_article.sql
    -- Le Delete est lance sur la vue mais
    -- l instruction instead of permet de rediriger le delete vers la bonne table
    -- en l occurence gamme_article;
     
            delete gamme_article where idlig = :old.idlig;
    END;
    /
     
     
    DROP TRIGGER OPS$PROJET.T_VGAMME_ARTICLE_INS;
     
    CREATE OR REPLACE TRIGGER OPS$PROJET.t_vgamme_article_ins
    instead of insert
    ON OPS$PROJET.VGAMME_ARTICLE for each row
    begin
    --
    -- $TRIGGER/gamme_article.sql
    -- L insert est lance sur la vue mais
    -- l instruction instead of permet de rediriger l update vers la bonne table
    -- en l occurence gamme_article;
     
    	insert into gamme_article (saison,secteur,rgp_pays,gamme,art)
    	values (:new.saison,:new.secteur,:new.rgp_pays,:new.gamme,:new.art);
    END;
    /
     
     
    DROP TRIGGER OPS$PROJET.T_VGAMME_ARTICLE_UPD;
     
    CREATE OR REPLACE TRIGGER OPS$PROJET.t_vgamme_article_upd
    instead of update
    ON OPS$PROJET.VGAMME_ARTICLE for each row
    begin
    --
    -- $TRIGGER/gamme_article.sql
    -- Update est lance sur la vue mais
    -- l instruction instead of permet de rediriger l update vers la bonne table
    -- en l occurence gamme_article;
     
    	update gamme_article set saison = :new.saison
    				,secteur = :new.secteur
    				,rgp_pays = :new.rgp_pays
    				,gamme = :new.gamme
    				,art = :new.art
    				where idlig = :old.idlig;
    END;
    /
     
     
    DROP PUBLIC SYNONYM VGAMME_ARTICLE;
     
    CREATE PUBLIC SYNONYM VGAMME_ARTICLE FOR OPS$PROJET.VGAMME_ARTICLE;
     
    GRANT DELETE, INSERT, SELECT, UPDATE, ON COMMIT REFRESH, QUERY REWRITE, DEBUG, FLASHBACK ON OPS$PROJET.VGAMME_ARTICLE TO MINIER;
    Les scripts des triggers sur la vue vgamme_article sont à la fin de la partie code sur la vue vgamme_article.

    Lorsque je veux faire une modification dans la form, il me donne une erreur :

    FRM - 40602 : cannot insert into or update in view.
    Quels sont les propriétés de mon block basé sur ma vue que je dois modification pour que ca fonctionne.

    J'ai vu dans un vieux message sur un forum qu'il fait modifier la valeur du champ locking mode mais je ne sais pas quoi mettre.

    Si je fais un insert ou update ou delete en SQL directement, là tout fonctionne bien. Les triggers instead of jouent bien leur rôle.

    Merci d'avance pour votre aide.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Février 2004
    Messages : 118
    Par défaut
    Bonjour

    un petit coup de mains serait le bienvenu sur mon problème.

    J'avais grand espoir avec cette fonctionnalité mais c'est encore form qui me bloque !!!

    Merci d'avance

  3. #3
    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
    Faites les opérations sur cette vue via les triggers ON-INSERT, ON-UPDATE et ON-DELETE

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Février 2004
    Messages : 118
    Par défaut
    Merci beaucoup pour la réponse rapide.

    Je regarde de ce coté là.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Février 2004
    Messages : 118
    Par défaut
    J'ai désactivé mes trigger instead of

    J'ai refait un block sur ma vue vgamme_article

    J'ai mis le code du trigger insert (instead of) dans le trigger form on-insert.
    Lorsque je désire faire modifier la valeur d'un champ affiché, j'obtiens l'erreur frm suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FRM - 40501 : unable to reserve record for update or delete
    Donc l'opération update n'a pas encore commencé. Pour info voici le code que j'ai mis dans mon trigger on-insert :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    insert into gamme_article (saison,secteur,rgp_pays,gamme,art)
    	values (:a.saison,:a.secteur,:a.rgp_pays,:A.gamme,:a.art);
    Merci d'avance

  6. #6
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Ou tu peux utiliser les triggers INSTEAD OF au niveau Base de Données
    instead of insert, update,delete
    Exemple:
    http://www.vbforums.com/showthread.php?t=566036

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Février 2004
    Messages : 118
    Par défaut
    Citation Envoyé par salim11 Voir le message
    Ou tu peux utiliser les triggers INSTEAD OF au niveau Base de Données
    instead of insert, update,delete
    Justement c'est ce que je désire faire mais je n'arrive pas à les utiliser ensuite avec forms. Voir le premier post

Discussions similaires

  1. [SQL SERVER 2k5]Trigger update instead of sur vue
    Par qlaimand dans le forum Développement
    Réponses: 0
    Dernier message: 18/06/2008, 17h06
  2. Update sur vue
    Par lambert2 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 04/04/2008, 15h19
  3. [Access 2007] update sur des tables / vues SQL server
    Par Flamby38 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 28/09/2007, 13h56
  4. Mapping sur Vue / Update non voulue.
    Par Ho(c)ine. dans le forum Hibernate
    Réponses: 3
    Dernier message: 23/08/2007, 09h44
  5. [forms]block basé sur plusieurs vues
    Par ramaro dans le forum Forms
    Réponses: 1
    Dernier message: 14/04/2006, 12h05

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