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 :

Besoin en déclencheur solde client sur la table F_DOCENTETE


Sujet :

Développement SQL Server

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Points : 0
    Points
    0
    Par défaut Besoin en déclencheur solde client sur la table F_DOCENTETE
    j'ai un cas un peu différent, dont je ne peut pas utiliser le contrôle de l'encours sur sage (suite a une gestion interne).
    Bonjour,

    j'ai procéder a la création d'une vue sur SQL Server. qui me permet d'extraire le solde que je cherche a contrôler.

    la VUE nommée dbo.View_CTRLENC, sous le model suivant :
    CT_Num *** CATTC *** REG *** SOLDE(CATTC-REG) *** CT_Encours *** CT_ControlEnc


    J'ai besoin d'un Déclencheur sur la table F_DOCENTETE lors de la création d'un document par un utilisateur, le client devient bloquer au cas ou le SOLDE > CT_Encours, sinon un message d'avertissement disant que le client est en dépassement.

    merci pour votre collaboration,

  2. #2
    Invité
    Invité(e)
    Par défaut
    Il va peut-être falloir faire des efforts dans tes exlpications car là, c'est incompréhensible.
    On en connait rien de ton environnement et on n'a pas d'explications claires.

    Citation Envoyé par aarab Voir le message
    j'ai un cas un peu différent,
    Différent de quoi ??
    Citation Envoyé par aarab Voir le message
    J'ai besoin d'un Déclencheur sur la table F_DOCENTETE lors de la création d'un document par un utilisateur, le client devient bloquer au cas ou le SOLDE > CT_Encours, sinon un message d'avertissement disant que le client est en dépassement.
    Un message d'avertissement ? Ce n'est pas à la bd de faire ça.
    Elle peut générer une erreur, certes, mais c'est à l'application de la transmettre à l'utilisateur.
    Et finalement, on ne sait pas à quoi ressemble ta table...
    Peux-tu nous montrer ce que tu as commencé à faire ?

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Merci pour votre intérêt, je travaille sur un environnement SQL SERVEUR 2008, avec l'application métier SAGE V16.
    dont la table des documents de vente est F_DOCENTETE.
    et la F_COMPTET c'est la table des clients.
    Dbo.CLE c'est la vue créer pour calculer le solde client.

    Voila le trigger que j'essay de créer (sur le F_docentete).
    et ci-joint la capture de la vue créer (calculant le solde).

    lors de la saisie du code client sur la table F_docentete je cherche qu'un blocage se fait en interdisant son insertion si le solde est > du CT_Encours

    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
    USE [TEST]
    GO
    /****** Object: Trigger [dbo].[CONTROLEENC] Script Date: 02/07/2012 10:19:30 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author: <Author,,Name>
    -- Create date: <Create Date,,>
    -- Description: <Description,,>
    -- =============================================
    ALTER TRIGGER [dbo].[CONTROLEENC]
    ON [dbo].[F_DOCENTETE]
    After insert
    AS 
    Declare @DO_tiers varchar(17)
    Declare @CT_Num varchar(17)
    Declare @SOLDE numeric
    Declare @CT_Encours numeric
     
    Set @DO_tiers = (Select @DO_tiers From inserted)
    Set @CT_Num = (Select CT_Num From dbo.CLE where ct_num = @do_tiers)
    Set @SOLDE = (Select SOLDE From dbo.CLE where ct_num = @do_tiers)
    Set @CT_Encours = (Select CT_Encours From dbo.CLE where ct_num = @do_tiers)
     
    BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    If @SOLDE > @CT_Encours 
    Begin
    Raiserror('Le client est en depassement %s',10,16, @Do_tiers)
    RollBack transaction
     
    End
    -- Insert statements for trigger here
     
    END
    Images attachées Images attachées  

  4. #4
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Attention ton TRIGGER n'est pas ensembliste et ne traite qu'une insertion à la fois...

    Inserted est une table... qui contient autant de lignes qu'il y a de lignes insérées/mise à jour par la requete déclenchant le TRIGGER.

    Le raiserror est surement intercepté et affiché par ton code client?
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Points : 0
    Points
    0
    Par défaut
    L'application client n’arrête pas l'entrer du do_tiers. et aucun message d'erreur n'est afficher.

    Est ce que c'est possible que le declancheur fonctionne malgré que je fait appelle a une vue.

    Pouvez-vous m'indiquer ou est exactement le problème, et comment puis-je faire fonctionner mon trigger.

  6. #6
    Membre averti
    Homme Profil pro
    R&D
    Inscrit en
    Avril 2004
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : R&D

    Informations forums :
    Inscription : Avril 2004
    Messages : 127
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par aarab Voir le message
    Pouvez-vous m'indiquer ou est exactement le problème, et comment puis-je faire fonctionner mon trigger.
    Salut,

    Il y a des pb du code non-ensembliste ainsi que la sévérité de raiserror() peut être insuffisante. Essaye le trigger suivant
    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
    ALTER TRIGGER [dbo].[CONTROLEENC]
    ON [dbo].[F_DOCENTETE]
    AFTER INSERT
    AS
    BEGIN
      SET NOCOUNT ON;
      DECLARE @do_tiers varchar(17);
      SET @do_tiers = (
        SELECT TOP 1 i.do_tiers
        FROM inserted i INNER JOIN dbo.CLE c ON i.do_tiers = c.ct_num
        WHERE c.solde > c.ct_encours);
      IF @do_tiers IS NOT NULL BEGIN
        RAISERROR('Le client est en depassement %s', 11, 1, @do_tiers);
        ROLLBACK TRANSACTION
      END
    END
    GO

Discussions similaires

  1. [Objective-C] Besoin d'aide sur un Table View
    Par Raphy55 dans le forum Objective-C
    Réponses: 1
    Dernier message: 07/06/2015, 20h18
  2. [MLD] Question sur les Tables Facture,Client
    Par freud dans le forum Schéma
    Réponses: 9
    Dernier message: 24/02/2010, 13h59
  3. Besoin d'aide sur une table en SAS
    Par 8twilight8 dans le forum Macro
    Réponses: 8
    Dernier message: 29/04/2009, 15h04
  4. Besoin d'aide pour requête sur grosse table
    Par Fabouney dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/01/2006, 09h01
  5. besoin d'aide -> requete sur 2 tables avec count()
    Par parksto dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/10/2005, 19h06

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