Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème de déclencheur (trigger)

3 réponses
Avatar
Pierre Fauconnier
Bonjour

J'ai un petit souci avec deux tables en sql (MSDE 2000)

J'ai une table tCommandes avec une clé primaire ComID et un champ ComSol
pour le solde à livrer.
J'ai une table tLivraisons avec un champ LivQte pour la qté livrée et un
champ ComID lié à la table des commandes.

Le but est bien entendu qu'à l'ajout d'une ligne dans la table des
livraisons, ComSol soit adapté dans la table des commandes.

Pour ce faire, j'utilise ceci:

ALTER TRIGGER AjoutMAJSoldeCommande
on dbo.tlivraisons
for insert
as
update tcommandes set tcommandes.comsol = (tcommandes.comsol -
inserted.livqte) from tcommandes inner join inserted on (tcommandes.comid =
inserted.comid)

Le hic, c'est que le déclencheur fonctionne, mais mal.
Avec un ComSol de 500, l'ajout d'une livraison sur une commande modifie le
ComSol de cette commande en retranchant (496 + LivQte). Donc, une livraison
de 0 pièces retranche 496 unités de ComSol...

Où est l'erreur?

D'avance, merci pour vos éclaircissements.

--
Pierre Fauconnier (pierre.fauconnier@nospam.nospam) (Skype:
pierre_fauconnier)
"Les choses qui n'ont rien en commun ont en commun qu'elles n'ont rien en
commun"
Remplacez nospam.nospam par pfi.be pour répondre. Merci

3 réponses

Avatar
Oliv'
*Pierre Fauconnier que je salut a écrit *:
Bonjour

J'ai un petit souci avec deux tables en sql (MSDE 2000)

J'ai une table tCommandes avec une clé primaire ComID et un champ
ComSol pour le solde à livrer.
J'ai une table tLivraisons avec un champ LivQte pour la qté livrée et
un champ ComID lié à la table des commandes.

Le but est bien entendu qu'à l'ajout d'une ligne dans la table des
livraisons, ComSol soit adapté dans la table des commandes.

Pour ce faire, j'utilise ceci:

ALTER TRIGGER AjoutMAJSoldeCommande
on dbo.tlivraisons
for insert
as
update tcommandes set tcommandes.comsol = (tcommandes.comsol -
inserted.livqte) from tcommandes inner join inserted on
(tcommandes.comid = inserted.comid)

Le hic, c'est que le déclencheur fonctionne, mais mal.
Avec un ComSol de 500, l'ajout d'une livraison sur une commande
modifie le ComSol de cette commande en retranchant (496 + LivQte).
Donc, une livraison de 0 pièces retranche 496 unités de ComSol...

Où est l'erreur?

D'avance, merci pour vos éclaircissements.



J'ai pas touT compris peut tu essayer de reexpliquer
sinon un pisteserais de tester ta valeur

if (select livqte from inserted ) >0
begin
update...
end

utiliser aussi coalesce pour les valeurs nulles.

--
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Pour me joindre : http://cerbermail.com/?V8r2o1YHl4
les sites références:
Excel :http://www.excelabo.net http://xcell05.free.fr/
http://dj.joss.free.fr/
http://frederic.sigonneau.free.fr/ http://www.excel-vba-francais.com/
Word : http://faqword.free.fr/
Outlook : http://faq.outlook.free.fr/
les archives : http://groups.google.com/group/microsoft.public.fr.outlook
OE6 : http://www.faqoe.com/
Sql : http://sqlpro.developpez.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Avatar
Pierre Fauconnier
Bonjour Oliv',

Il me semble que nous nous croisons de temps en temps sur MPFE. Me
trompe-je?

Pour revenir à mon problème.

En fait, après avoir vérifié, testé et pesté, je me suis rendu compte que...
j'avais un autre déclencheur, que je croyais avoir supprimé, qui effectuait
lui aussi une opération lors de l'insertion d'une nouvelle donnée. Une fois
ce déclencheur supprimé, tout a bien fonctionné.

Désolé pour la perte de temps du à ma négligence... et merci d'avoir pris le
temps de lire.


--
Pierre Fauconnier () (Skype:
pierre_fauconnier)
"Les choses qui n'ont rien en commun ont en commun qu'elles n'ont rien en
commun"
Remplacez nospam.nospam par pfi.be pour répondre. Merci

"Oliv'" a écrit dans le message
de news: %

*Pierre Fauconnier que je salut a écrit
*:
Bonjour

J'ai un petit souci avec deux tables en sql (MSDE 2000)

J'ai une table tCommandes avec une clé primaire ComID et un champ
ComSol pour le solde à livrer.
J'ai une table tLivraisons avec un champ LivQte pour la qté livrée et
un champ ComID lié à la table des commandes.

Le but est bien entendu qu'à l'ajout d'une ligne dans la table des
livraisons, ComSol soit adapté dans la table des commandes.

Pour ce faire, j'utilise ceci:

ALTER TRIGGER AjoutMAJSoldeCommande
on dbo.tlivraisons
for insert
as
update tcommandes set tcommandes.comsol = (tcommandes.comsol -
inserted.livqte) from tcommandes inner join inserted on
(tcommandes.comid = inserted.comid)

Le hic, c'est que le déclencheur fonctionne, mais mal.
Avec un ComSol de 500, l'ajout d'une livraison sur une commande
modifie le ComSol de cette commande en retranchant (496 + LivQte).
Donc, une livraison de 0 pièces retranche 496 unités de ComSol...

Où est l'erreur?

D'avance, merci pour vos éclaircissements.



J'ai pas touT compris peut tu essayer de reexpliquer
sinon un pisteserais de tester ta valeur

if (select livqte from inserted ) >0
begin
update...
end

utiliser aussi coalesce pour les valeurs nulles.

--
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Pour me joindre : http://cerbermail.com/?V8r2o1YHl4
les sites références:
Excel :http://www.excelabo.net http://xcell05.free.fr/
http://dj.joss.free.fr/
http://frederic.sigonneau.free.fr/ http://www.excel-vba-francais.com/
Word : http://faqword.free.fr/
Outlook : http://faq.outlook.free.fr/
les archives : http://groups.google.com/group/microsoft.public.fr.outlook
OE6 : http://www.faqoe.com/
Sql : http://sqlpro.developpez.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~




Avatar
Oliv'
*Pierre Fauconnier que je salut a écrit *:
Bonjour Oliv',

Il me semble que nous nous croisons de temps en temps sur MPFE. Me
trompe-je?


du tout c'est effectivement le cas !!

Pour revenir à mon problème.

En fait, après avoir vérifié, testé et pesté, je me suis rendu compte
que... j'avais un autre déclencheur, que je croyais avoir supprimé,
qui effectuait lui aussi une opération lors de l'insertion d'une
nouvelle donnée. Une fois ce déclencheur supprimé, tout a bien
fonctionné.
Désolé pour la perte de temps du à ma négligence... et merci d'avoir
pris le temps de lire.



Pas grave
A+
Oliv'


"Oliv'" a écrit dans le
message de news: %

*Pierre Fauconnier que je salut a
écrit *:
Bonjour

J'ai un petit souci avec deux tables en sql (MSDE 2000)

J'ai une table tCommandes avec une clé primaire ComID et un champ
ComSol pour le solde à livrer.
J'ai une table tLivraisons avec un champ LivQte pour la qté livrée
et un champ ComID lié à la table des commandes.

Le but est bien entendu qu'à l'ajout d'une ligne dans la table des
livraisons, ComSol soit adapté dans la table des commandes.

Pour ce faire, j'utilise ceci:

ALTER TRIGGER AjoutMAJSoldeCommande
on dbo.tlivraisons
for insert
as
update tcommandes set tcommandes.comsol = (tcommandes.comsol -
inserted.livqte) from tcommandes inner join inserted on
(tcommandes.comid = inserted.comid)

Le hic, c'est que le déclencheur fonctionne, mais mal.
Avec un ComSol de 500, l'ajout d'une livraison sur une commande
modifie le ComSol de cette commande en retranchant (496 + LivQte).
Donc, une livraison de 0 pièces retranche 496 unités de ComSol...

Où est l'erreur?

D'avance, merci pour vos éclaircissements.



J'ai pas touT compris peut tu essayer de reexpliquer
sinon un pisteserais de tester ta valeur

if (select livqte from inserted ) >0
begin
update...
end

utiliser aussi coalesce pour les valeurs nulles.