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

Oracle Discussion :

MAJ de champs avec un trigger


Sujet :

Oracle

  1. #1
    Membre régulier
    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
    Points : 90
    Points
    90
    Par défaut MAJ de champs avec un trigger
    Deuxième question de la matinée,

    La situation : j'ai une table A qui contient les champs A1,A2,A3,A4. Tous ces champs sont affichés dans une forms. Je mets à jour les champs A1 et A2 par saisie dans la forms et les champs A3 et A4 sont mis à jour par l'intermédiaire d'un trigger BEFORE INSERT ON A FOR EACH ROW.

    Mon pb : Si après avoir commiter mon enrgistrement à travers FORMS, je désire à nouveau le modifier, forms me dit que mon enregistrement a été modifié par un autre user et que je dois reactualiser mes données. Ca parait normal vu que les champs A3 et A4 on été modifié par l'intermédiaire du trigger before insert. Existe t il un moyen de contourner le pb ?

    J'espère que j'ai été assez clair.

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Et pourquoi utiliser un trigger basé plutôt qu'un trigger Forms ?

  3. #3
    Membre régulier
    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
    Points : 90
    Points
    90
    Par défaut
    J'utilise un trigger car cette opération peut être faites de plusieurs endroits différents. cela m'évite de recopier ce même trigger dans plusieurs forms

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    N'y a-t-il pas la commande SYNCHRONIZE qui permet de pallier ce type de probléme ?

  5. #5
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    sinon, il suffirait surement de refaire un EXECUTE_QUERY pour mettre les données à jour, non ?

  6. #6
    Membre régulier
    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
    Points : 90
    Points
    90
    Par défaut
    je vais tester le synchronize mais pour refaire l'execute_query, le problème c'est qu'il se remet sur le 1er enregsitrement du bloc.

  7. #7
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    et alors ? Tu peux te positionner où tu veux après le EXECUTE_QUERY

    Tu sauve le n° de la ligne avant le execute et ensuite tu te remets dessus... par contre ça risque de ne pas être très esthétique

  8. #8
    Membre régulier
    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
    Points : 90
    Points
    90
    Par défaut
    J'ai testé avec le synchronize ca ne marche pas le synchronize ne synchronise pas la base.

    Comment tu sauve le num de la ligne ?

  9. #9
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par orafrance
    et alors ? Tu peux te positionner où tu veux après le EXECUTE_QUERY

    Tu sauve le n° de la ligne avant le execute et ensuite tu te remets dessus... par contre ça risque de ne pas être très esthétique
    Et cela risque d'être très long si tu as beaucoup de données !

    Mais malheureusement je ne vois pas d'autres solutions. C'est un des gros défaut de forms...

  10. #10
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par gaultier
    Comment tu sauve le num de la ligne ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    v_anc_rec := :system.cursor_record;
    execute_query;
    go_record (v_anc_rec);

  11. #11
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    ouf... merci plaineR... ça fait plus de 3 ans que j'ai pas touché à Forms et là je commençais à être mal lol

  12. #12
    Membre régulier
    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
    Points : 90
    Points
    90
    Par défaut
    Merci à tous les deux, je vais me débrouiller seul maintenant.

    La solution du retour au dernier enregistrement ne me plait pas beaucoup, car si plusieurs enregistrements sont créés en même temps.
    Je vais sans doute être obliger de faire un trigger forms .

    Orafrance tu avais raison et je trouve que pour une personne qui n'a pas fait de forms depuis plusieurs années tu t'en tire pas trop mal.

  13. #13
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    merci

    Une solution pour mutualiser le code :
    Tu crées la procédure proc_matable_trig avec le code du trigger.

    Tu crées un package :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE PACKAGE SPECIFICATION var_contextuelles
    IS
    is_in_forms VARCHAR2(1) := 'N';
    END;
    /
    Sous Forms, dans ton trigger tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    BEGIN
    ...
    var_contextuelles.is_in_forms := 'Y';
    proc_matable_trig;
    ...
    END;
    /
    Dans le trigger de la table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    BEGIN
      IF var_contextuelles.is_in_forms = 'N' THEN;
        proc_matable_trig;
      END IF;
    END;
    /
    Et tu n'auras à maintenir que le code de ta procédure

  14. #14
    Membre régulier
    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
    Points : 90
    Points
    90
    Par défaut
    J'ai repensé mon application et maintenant la création d'enrgeistrements ne fait plus que dans une seule interface donc j'ai utilisé un trigger forms.


    Merci encore

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

Discussions similaires

  1. Update champ avec le meme champ de la meme table
    Par Baquardie dans le forum Langage SQL
    Réponses: 7
    Dernier message: 04/06/2004, 11h17
  2. ASP champs avec même nom
    Par pete007 dans le forum ASP
    Réponses: 8
    Dernier message: 03/05/2004, 22h58
  3. [CR][ASP.NET] Un champ avec plusieurs polices...
    Par David.V dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 08/04/2004, 14h19
  4. [PB CONCEPTUEL] avec compteur/trigger
    Par kase74 dans le forum SQL
    Réponses: 6
    Dernier message: 25/03/2004, 11h02
  5. Comment renommer un champ avec Module BD?
    Par technico dans le forum Bases de données
    Réponses: 4
    Dernier message: 27/01/2004, 21h24

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