Salut. J'ai un Trigger :

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
40
41
42
43
44
45
46
47
48
49
50
 
Create Trigger PARTICIPANTS_Delete_Verif
On dbo.PARTICIPANTS
For  Delete 
 
AS
 
--Déclaration des variables
DECLARE
@participant int
 
BEGIN TRANSACTION
 
--Stockage de id (piece) que l'on tente de supprimer extraits de la table DELETED
SELECT 
@participant=(SELECT id_participant FROM deleted)
 
/*Si le participant a passer une offre dans la table ENCHERES et que la vente est fermée, il est impossible de supprimer ce participant */ 
 
IF EXISTS (Select e.id_participant FROM ENCHERES e WHERE e.id_participant=@participant)
AND
 NOT EXISTS (Select statut_paramvente From PARAMVENTE Where statut_paramvente=('En cours'))
 
/*Appel d'un message d'erreur personnalisé dont l'id est 500012*/
 
BEGIN
--Déclaration des variables
DECLARE
@error nvarchar(50)
SELECT
@error='LES PARTICIPANTS'
RAISERROR ( 50012,16, 1,@error)
ROLLBACK TRANSACTION
END
 
/*Si la vente n'est pas fermée le participant peut être supprimé mais on doit également supprimer l'ensemble des ses enchères*/
 
IF EXISTS (Select e.id_participant FROM ENCHERES e WHERE e.id_participant=@participant)
AND
EXISTS (Select statut_paramvente From PARAMVENTE Where statut_paramvente=('En cours'))
 
/*Requête de suppression avec nom table*/
DELETE FROM ENCHERES 
Where  ENCHERES.id_participant=@participant
 
/* Si une vente est en cours, ou que le participant n'a pas passé d'enchere alors sa suppression est possible */
 
BEGIN
COMMIT WORK
END
Mon message personnalisé:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
Alter Procedure [Ajout_message_Personnalisé: 50012]
AS
EXEC sp_addmessage @msgnum =50012, @severity = 16, 
@msgtext = 'THE AUCTIONS ARE CLOSED --- FOR MORE INFORMATIONS %s ON THE NEXT AUCTION SALE THANKS TO CHECK PLANNING.',
@lang = 'us_english',
@replace='replace'
 
EXEC sp_addmessage @msgnum =50012, @severity = 16, 
@msgtext = 'LA VENTE EST FERMEE --- TOUTES LES ACTIONS SUR %1! SONT DESORMAIS SUSPENDUES. MERCI DE CONSULTER LE CALENDRIER POUR CONNAÎTRE LA LISTE DES VENTES EN PREVISION.',
@lang = 'French',
@replace='replace'
J'ai également une page d'erreur personnalisée pour HTTP 500;100

Elle fonctionne parfaitement mais je souhaite modifier son apparence lorsque l'erreur rencontrée est 50012. Malheureusement lorsque dans cette page je cherche à stocker dans une variable objASPError.number j'ai (-2147217900) et si je stocke err.number j'ai zéro !

Est-ce qu'il a un moyen de faire en sorte que le numero d'erreur renvoyé soit le bon (50012) ?

Petite précision, ce déclencheur est activé par l'intermédiaire d'une page asp de traitement lorsqu'un participant cherche à résilier son compte :

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
40
41
42
43
44
45
 
<%
<!--
 
//Déclare la variable Delete_participant__login nécessaire à l'execution de la procédure Delete_participant.
 
Dim Delete_participant__login
 
//Stocke le contenu de la variable session MM_Username dans cette variable nouvellement déclarée.
 
Delete_participant__login = ""
 
if(Session("MM_Username") <> "") then Delete_participant__login = Session("MM_Username")
 
//Lance la procédure de résiliation de compte participant.
//Pour que la procédure trouve le compte à résilier elle a besoin d'un identifiant.
//Celui-ci est passé comme paramètre grace à la variable Delete_participant__login.
 
set Delete_participant = Server.CreateObject("ADODB.Command")
Delete_participant.ActiveConnection = MM_conn_Base_site_STRING
Delete_participant.CommandText = "dbo.Delete_Participant"
Delete_participant.Parameters.Append Delete_participant.CreateParameter("RETURN_VALUE", 3, 4)
Delete_participant.Parameters.Append Delete_participant.CreateParameter("@login", 129, 1,10,Delete_participant__login)
Delete_participant.CommandType = 4
Delete_participant.CommandTimeout = 0
Delete_participant.Prepared = true
Delete_participant.Execute()                           
 
//Stocke la valeur retournée par la procédure qui vient de s'executer.
 
IsValid=Delete_participant.Parameters("RETURN_VALUE").value
 
//Si la valeur stockée dans la variable est 1.
 
if IsValid=1 then 
 
//Alors on redirige le navigateur vers une page de confirmation de résiliation.
 
Response.redirect("../Resiliation_valid.asp")
 
Else 
response.Write(Mid(err.Description,InStrRev(err.Description,"]")+1))
end if
-->
%>
Dans cette version je n'utilise pas "On Error Resume next".

Donc le code n'est pas exécuté entièrement et dès qu'une erreur apparait
j'ai bien la page d'erreur personnalisée pour HTTP 500;100 qui s'affiche.
objASPError.description affiche bien le contenu de mon message 50012
mais impossible de récupérer ce numéro.

Merci d'avance pour votre réactivité ...