Salut. J'ai un Trigger :
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
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
J'ai également une page d'erreur personnalisée pour HTTP 500;100
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'
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 :
Dans cette version je n'utilise pas "On Error Resume next".
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 --> %>
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é ...
Partager