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

Développement SQL Server Discussion :

Trigger Update (MSDE 2000 + ACCESS)


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut Trigger Update (MSDE 2000 + ACCESS)
    Bonjour

    Je travaille avec MSDE 2000 géré par Access.

    J'ai une table Contrats et une table Commandes. Des commandes peuvent être
    enregistrées, liées ou non à un contrat.
    Je souhaite utiliser un déclencheur pour mettre ma table contrats à jour
    avec les qtés commandées, à chaque ajout de commande.
    Je pensais utiliser ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ALTER TRIGGER AjoutCommande
    ON dbo.tCommandes
    for insert
    as
    update tcontrats set concdeqte = inserted.comqte from tcontrats inner join 
    inserted on tcontrats.conid = inserted.conid
    Le déclencheur fonctionne lorsque j'ai un numéro de contrat dans ma table de
    commandes. Par contre, lorsque ma commande n'est pas liée à un contrat, j'ai
    un message qui me dit, en substance:
    "Conflit d'écriture: Cet enregistrement a été modifié par un autre
    utilisateur...Si vous continuez, vous remplacerez les données de l'autre
    utilisateur..."
    Si j'annule, ma commande est bien enregistrée, si je réponds "sauvegarder
    l'enregistrement", il me le sauve une deuxième fois...

    C'est évidemment gênant pour l'utilisateur final d'avoir ce genre de
    messages...

    Est-ce dû à mon déclencheur? J'ai essayé avec
    if update(conid)
    update ...

    Mais je n'arrive pas à fermer mon bloc IF. Si je mets END, il refuse, ENDIF
    aussi.

    Merci pour l'aide que vous pourrez m'apporter.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  2. #2
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Par défaut
    je pense que le if update doit être sur le champ Qte plutot
    encadre bien les blocs par begin end (ca mange pas de pain et c'est plus propre)
    mets plutot after insert (pour plus tard) car le for ne sera pas maintenu et sera remplcé par After ou before comme oracle
    teste d'abord l'existence du contrat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ALTER TRIGGER AjoutCommande
    ON dbo.tCommandes
    AFTER INSERT
    AS
    begin
    if update(comqte)
      BEGIN 
        if exists(select 1 from tcontrats where tcontrats.conid = inserted.conid)
          BEGIN
            UPDATE tcontrats SET concdeqte = inserted.comqte FROM tcontrats   
            INNER JOIN inserted ON tcontrats.conid = inserted.conid
          END
      END
    end

Discussions similaires

  1. Pojet access et msde 2000
    Par JOBRU dans le forum Access
    Réponses: 4
    Dernier message: 08/01/2006, 09h42
  2. [trigger] update inserted?
    Par cosminutza dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/06/2005, 09h37
  3. Réponses: 2
    Dernier message: 10/05/2005, 18h15
  4. Trigger Update et Column_Updated
    Par Pm dans le forum Développement
    Réponses: 2
    Dernier message: 16/06/2004, 09h07
  5. [MSDE 2000] Récup champ text depuis proc stockée
    Par Air'V dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/12/2003, 19h47

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