Problème sur un trigger AFTER INSERT
Modérateurs: Super-Apogea, Super Modérateur
5 messages
|Page 1 sur 1
Problème sur un trigger AFTER INSERT
Bonjour à tous,
J'ai créé un champ d'information libre QteInitiale de type Valeur dans les lignes de document.
Pour simplifier, je veux simplement que ce champ prenne automatiquement la valeur du champ 'dl_qte' lors de l'enregistrement d'une ligne dans un bon de commande.
J'ai donc créé un trigger sur F_DOCLIGNE :
Seulement l'update ne fonctionne pas, pourtant la requete que j'affiche grace à SendMessage est bonne ... Je pense que c'est du à un 'document en cours d'utilisation', même si je n'ai aucun message qui apparait
Quelqu'un peut il me renseigner ?
SQLSERVER 2008
J'ai créé un champ d'information libre QteInitiale de type Valeur dans les lignes de document.
Pour simplifier, je veux simplement que ce champ prenne automatiquement la valeur du champ 'dl_qte' lors de l'enregistrement d'une ligne dans un bon de commande.
J'ai donc créé un trigger sur F_DOCLIGNE :
- Code: Tout sélectionner
USE [ATAI7_Copie]
GO
/****** Object: Trigger [dbo].[UpdateQteInit] Script Date: 06/08/2016 13:53:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].UpdateQteInit
ON [dbo].[F_DOCLIGNE]
AFTER INSERT
AS
BEGIN
declare @dl_no as integer
declare @do_type as integer
declare @dlqte as integer
declare @dopiece as varchar(20)
declare @txterreur as varchar(255)
select
@dl_no = DL_No,
@dopiece = do_piece,
@dlqte = dl_qte,
@do_type = do_type
from inserted
if (@do_type = 1) begin
begin try
update F_DOCLIGNE set QteInitiale = @dlqte where DL_No=@dl_no
-- Affichage de la requête
select @txterreur = 'update F_DOCLIGNE set QteInitiale = '+cast(@dlqte as varchar)+' where DL_No='+cast(@dl_no as varchar)
EXEC dbo.CB_SendMessage @@SPID, @txterreur
end try
begin catch
EXEC dbo.CB_SendMessage @@SPID, ERROR_MESSAGE
end catch;
end;
end
Seulement l'update ne fonctionne pas, pourtant la requete que j'affiche grace à SendMessage est bonne ... Je pense que c'est du à un 'document en cours d'utilisation', même si je n'ai aucun message qui apparait
Quelqu'un peut il me renseigner ?
SQLSERVER 2008
Re: Problème sur un trigger AFTER INSERT
Bonjour,
Tu fais une requete AFTER INSERT sur une info libre ....
Petit problème : sur une info libre les AFTER INSERT, etc ... ne fonctionnent pas.
SAGE écrit une première fois sa ligne dans la base ... INSERT mais SANS les infos libres.
Ensuite SAGE fait des UPDATE sur la ligne ... Pour toucher une info libre il faut faire des AFTER UPDATE ...et en plus utiliser des NEXTLEVEL sinon ça plante ...
Cdlt
Tu fais une requete AFTER INSERT sur une info libre ....
Petit problème : sur une info libre les AFTER INSERT, etc ... ne fonctionnent pas.
SAGE écrit une première fois sa ligne dans la base ... INSERT mais SANS les infos libres.
Ensuite SAGE fait des UPDATE sur la ligne ... Pour toucher une info libre il faut faire des AFTER UPDATE ...et en plus utiliser des NEXTLEVEL sinon ça plante ...
Cdlt
Re: Problème sur un trigger AFTER INSERT
Merci,
Effectivement cela correspond au fonctionnement des Objets Metiers , pour lesquels il faut d'abord créer la ligne, puis la modifier avec les infos libres
Je vais tenter quelques essais.... Merci
Effectivement cela correspond au fonctionnement des Objets Metiers , pour lesquels il faut d'abord créer la ligne, puis la modifier avec les infos libres
Je vais tenter quelques essais.... Merci
Re: Problème sur un trigger AFTER INSERT
Bonjour,
Petite information qui m'a été par SAGE en personne : les triggers en INSERT sur la table F_DOCLIGNE ne font pas leur job correctement, pour renseigner n'importe quel champ, y compris DL_DESIGN, il faut faire un trigger en UPDATE.
Par contre, pas de soucis quand on se crée des triggers en INSERT sur la table F_DOCENTETE.
Petite information qui m'a été par SAGE en personne : les triggers en INSERT sur la table F_DOCLIGNE ne font pas leur job correctement, pour renseigner n'importe quel champ, y compris DL_DESIGN, il faut faire un trigger en UPDATE.
Par contre, pas de soucis quand on se crée des triggers en INSERT sur la table F_DOCENTETE.
- Super Contributeur
- Messages: 176
- Inscription: Sam 28 Juin 2014 20:48
Re: Problème sur un trigger AFTER INSERT
@ROMULUS,
Ce n'est pas que les triggers SAGE ne fassent pas leur boulot, mais plutôt que c'est un choix de fonctionnement :
L'insert crée les données minimales et des updates sont fait ensuite (en particulier sur les informations libres).
Ne pas oublier que ce n'est pas de la programmation 'native' SQL et que c'est l'application cliente qui fait, selon ses propres algorithmes, les INSERT et UPDATE, d'où l'utilité de passer par les Objets Métiers qui s'appuient sur les Dll de l'application cliente.
Même si un trigger vient modifier une information libre sur une ligne de document, par exemple, ce n'est pas pour autant que la partie cliente de l'application le 'visualise', et, si dans son interface ou son cache, l'information libre est vide (alors que ton trigger l'a alimenté ), quand la ligne va être validée, sa valeur est celle de la partie cliente.
Bref, on ne fait pas ce qu'on veut.
Cordialement,
Ce n'est pas que les triggers SAGE ne fassent pas leur boulot, mais plutôt que c'est un choix de fonctionnement :
L'insert crée les données minimales et des updates sont fait ensuite (en particulier sur les informations libres).
Ne pas oublier que ce n'est pas de la programmation 'native' SQL et que c'est l'application cliente qui fait, selon ses propres algorithmes, les INSERT et UPDATE, d'où l'utilité de passer par les Objets Métiers qui s'appuient sur les Dll de l'application cliente.
Même si un trigger vient modifier une information libre sur une ligne de document, par exemple, ce n'est pas pour autant que la partie cliente de l'application le 'visualise', et, si dans son interface ou son cache, l'information libre est vide (alors que ton trigger l'a alimenté ), quand la ligne va être validée, sa valeur est celle de la partie cliente.
Bref, on ne fait pas ce qu'on veut.
Cordialement,
ASR31
En recherche de missions.
En recherche de missions.
5 messages
|Page 1 sur 1
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités