Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/02/2012, 14h58   #1
 
Homme
Administrateur systèmes et réseaux
Inscription : 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 : -1
Points : -1
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,
aarab est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 07/02/2012, 15h15   #2
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
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 ?
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/02/2012, 15h51   #3
 
Homme
Administrateur systèmes et réseaux
Inscription : 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 : -1
Points : -1
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 :
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
Type de fichier : jpg 1.jpg (111,8 Ko, 2 affichages)
aarab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 16h49   #4
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
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.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/02/2012, 17h04   #5
 
Homme
Administrateur systèmes et réseaux
Inscription : 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 : -1
Points : -1
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.
aarab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2012, 23h25   #6
Membre du Club
 
Homme
Expert SQL Server
Inscription : avril 2004
Messages : 52
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39
Localisation : France

Informations professionnelles :
Activité : Expert SQL Server

Informations forums :
Inscription : avril 2004
Messages : 52
Points : 55
Points : 55
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 :
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
Serguei_TARASSOV est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h46.


 
 
 
 
Partenaires

Hébergement Web