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

PostgreSQL Discussion :

Problème de violation


Sujet :

PostgreSQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    UTC
    Inscrit en
    Décembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : UTC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Problème de violation
    Bonjour à tous,

    Ceci est mon premier message je m'excuse donc d'avance si j'oublie une formalité quelconque.
    Mon problème est le suivant :

    je possède deux tables créées de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	CREATE TABLE utilisateur
    (
      id serial NOT NULL,
      login character varying(10) NOT NULL,
      mdp character varying(10) NOT NULL,
      CONSTRAINT utilisateur_pkey PRIMARY KEY (id)
    )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE TABLE liste
    (
      id serial NOT NULL,
      idutilisateur integer,
      nom character varying(30) NOT NULL,
      element integer,
      elementcoche integer,
      modele boolean,
      CONSTRAINT liste_pkey PRIMARY KEY (id),
      CONSTRAINT liste_idutilisateur_fkey FOREIGN KEY (idutilisateur)
          REFERENCES utilisateur (id) MATCH SIMPLE
          ON UPDATE NO ACTION ON DELETE NO ACTION
    )
    Tout cela fonctionne, je peux ensuite ajouter des données dans les deux tables. Seulement, si l'utilisateur avec l'id numéro 1 possède une liste et que je modifie l'id de l'utilisateur numéro 1, j'ai le droit à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ERREUR:  UPDATE ou DELETE sur la table « utilisateur » viole la contrainte de clé étrangère
    « liste_idutilisateur_fkey » de la table « liste »
    DETAIL:  La clé (id)=(1) est toujours référencée à partir de la table « liste ».
     
     
    ********** Erreur **********
     
    ERREUR: UPDATE ou DELETE sur la table « utilisateur » viole la contrainte de clé étrangère
    « liste_idutilisateur_fkey » de la table « liste »
    État SQL :23503
    Détail :La clé (id)=(1) est toujours référencée à partir de la table « liste ».
    J'ai essayer de créer un trigger pour effectuer une modification automatique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE FUNCTION change_idUser() RETURNS trigger AS $$
    BEGIN
    	UPDATE liste set liste.idUtilisateur = new.id;
    	RETURN NEW;
    END;
    $$ LANGUAGE plpgsql;
     
    CREATE trigger idUserChange AFTER UPDATE ON utilisateur
    FOR EACH ROW EXECUTE PROCEDURE change_idUser();
    mais cela ne fonctionne pas.

    Je comprends tout à fait le problème , étant une clef étrangère je ne peux pas modifier la valeur de l'id de l'utilisateur , .. mais moi je voudrais que ce soit faisable, avez-vous une solution pour moi ?

    Merci d'avance

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Essaye ON UPDATE CASCADE au lieu de ON UPDATE NO ACTION, NO ACTION étant justement le contraire de ce que tu voudrais.
    Pareil pour DELETE

  3. #3
    Futur Membre du Club
    Homme Profil pro
    UTC
    Inscrit en
    Décembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : UTC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Possibilité de faire ça avec un alter table ?

    Je l'ai modifié depuis pgadmin et cela fonctionne.
    Merci beaucoup pour votre aide rapide.

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

Discussions similaires

  1. Problème Access Violation dans une classe
    Par randriano dans le forum C++Builder
    Réponses: 1
    Dernier message: 11/04/2007, 18h49
  2. Réponses: 5
    Dernier message: 13/01/2007, 19h45
  3. Problème Acces Violation dans une DLL d'envoi de mail
    Par Avisseau dans le forum Delphi
    Réponses: 1
    Dernier message: 25/10/2006, 16h48
  4. [vb 2005]Problème de violation d'accès concurentiel
    Par estelledany dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/06/2006, 17h14
  5. Problème de violation d'accès
    Par Oluha dans le forum Bases de données
    Réponses: 11
    Dernier message: 31/05/2005, 10h26

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