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

SQL Procédural MySQL Discussion :

Intedire l'édition d'un champs.


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut Intedire l'édition d'un champs.
    Bonjour
    J'ai une table qui va contenir un entier. Cette entier est en faite un sum d'une autre table. Je ne pense pas pouvoir faire une clé étranger d'un resulstat d'un sum. Quoi que en réfléchissant via une vue est ce possible ?. Bref, je voudrais savoir s'il était possible d'interdire l'edition d'un champs dont le resultat represente un sum d'une autre table.
    Mysql 5.x

  2. #2
    Membre émérite
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Par défaut
    Salut,

    Je ne vois pas vraiment comment interdire l'accès "en écriture" à une colonne. Ca m'étonnerait fortement que ça soit faisable avec une clé étrangère !

    A quoi penses-tu quand tu parles de faire une vue ?

    Il y aurait peut-être la solution du trigger qui après chaque update de la table qui contient cette somme vérifie si la somme est correcte, sinon remet la bonne valeur (et encore, si je me rappelle bien, on ne peut pas modifier les tables concernées par le trigger).

    En fait, pourquoi veux-tu absolument interdire une modification ? Y a-t-il un risque que via ton application une modification ait lieu ?

  3. #3
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut
    Pour la vue. Dans la vue il y aura un champ qui aura pour resultat le sum d'une autre table. ce champs je le déclare comme clé etrangere sur la table finale comme ça il ne peut modifier cette valeur.

    Pourquoi? En faite c'est le stock des produits mais ce stock peut être issu de plusieurs paramètres issu de d'autre table. Si c'estqui fait que dans l'ensemble ça forme le stock total. Si les autres paramètres n'existe pas il peut modifier le champs dans le cas contraire il ne peut pas ça aura la valeur issu des autres paramètre.

    Le trigger ne peut pas modifier la valeur de la table concerné. En gros : un trigger sur la table A peut seulement modifier les valeurs de la table B mais de la table A même si c'est befor update ?

  4. #4
    Membre émérite
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Par défaut
    Je ne vois toujours pas comment tu pourrais faire ça avec une vue et une clé étrangère.

    La meilleure façon est quand même de vérifier les critères dans ton application et de désactiver le champ "stock total" s'il le faut.

    Pour la solution du trigger, il n'est en fait pas nécessaire de modifier la table. Tu peux modifier juste la nouvelle ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DELIMITER |
     
    CREATE TRIGGER nom_trig BEFORE UPDATE
        ON ta_table FOR EACH ROW
    BEGIN
    	-- les select éventuels pour récupérer les critères
     
    	IF somme_ne_peut_pas_etre_modifiee THEN
    		SET NEW.somme = OLD.somme;
    	END IF;
    END |
     
    DELIMITER ;
    Voilà, je sais pas si ça t'aide beaucoup

  5. #5
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut
    Merci beaucoup je vais étudier cela de très prèt. Je contrôlerais depuis l'application mais je veux contrer celui qui fourera ça truffe dans les enregistrements et que ça fausse les resultats. Que que je m'en fou il est responsable de se qu'il fait.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/09/2008, 10h42
  2. Interdire l'édition d'un champ de saisie
    Par Link45 dans le forum Flash
    Réponses: 4
    Dernier message: 05/12/2007, 13h40
  3. Masque d'édition sur champ numérique
    Par lodan dans le forum Langage
    Réponses: 2
    Dernier message: 14/09/2006, 22h05
  4. parcourir les champs d'édition avec enter
    Par programaniac dans le forum Composants VCL
    Réponses: 4
    Dernier message: 29/10/2005, 23h21
  5. Mysql - édition correcte des champs
    Par Sebe dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 27/10/2005, 12h59

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