IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Trigger et récup du raiserror dans page asp


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Trigger et récup du raiserror dans page asp
    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é ...

  2. #2
    Membre habitué Avatar de thor22
    Inscrit en
    Août 2004
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2004
    Messages : 150
    Points : 155
    Points
    155
    Par défaut
    Cette question serait mieux placée dans le forum ASP je crois...

    Mais ce que tu peux faire, c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if inStr(objASPError.description,"50012") > 0 then
    Et si ça s'évalue à Vrai, tu fais ton traitement pour changer ton apparence.
    Francis = Thor22 = Tholmir

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta proposition mais le problème c'est que dans obj.ASPError.Description il y a :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [Microsoft][ODBC SQL Server Driver][SQL Server]LA VENTE EST FERMEE --- TOUTES LES ACTIONS SUR LES PARTICIPANTS SONT DESORMAIS SUSPENDUES. MERCI DE CONSULTER LE CALENDRIER POUR CONNAÎTRE LA LISTE DES VENTES EN PREVISION.
    Et donc faire une recherche de chaîne donne fatalement zéro ...

    De plus comme je l'ai indiqué, si je travaille avec les propriétés de cet objet (number, code ect ..) je n'ai rien qui correspond à 50012.

    Toute la question est de savoir comment récupérer les infos d'une erreur qui survient dans un trigger
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RAISERROR ( 50012,16, 1,@error)
    Le point de départ c'est donc bien MS SLQ SERVER, non ?

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 6
    Points : 5
    Points
    5
    Par défaut [Résolu]
    J'ai trouvé une solution pour contourner le problème. Dans mes triggers:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    /*Appel d'un message d'erreur personnalisé dont l'id est 500012*/
    BEGIN
    --Déclaration des variables
    DECLARE
    @error nvarchar(50),
    @num nvarchar(15)
    SELECT
    @error='LES PARTICIPANTS',
    @num ='[Verrou_Appli]'
    RAISERROR ( 50012,16, 1,@error,@num)
    ROLLBACK TRANSACTION 
    END
    La variable @num va donc s'intégrer au message renvoyé et ensuite dans ma page ASP afin de différencier les erreurs standards et celles qui relèvent de la logique de mon appli je fais:

    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
     
     
    <%
    'Création d'une instance de l'objet ASPError
     
    Dim objASPError
    Set objASPError=Server.GetLastError()
     
    Dim strTitleChg, strPicChg, strDefChg, strMsgChg, strUrlChg
     
    // Recherche dans la description de l'erreur si il s'agit d'une erreur type Verrou(Trigger)
     
    IF (inStr(objASPError.Description,"[Verrou_Appli]")) >0 then 
     
    // Attribue les nouveaux éléments pour modifier l'apparence de ma page
    d'erreurs personnalisée.
     
    strTitleChg="Report.2gif''"
    strPicChg="Err_adodb.png"
    strDefChg= "Verrou de l'application"
    strUrlChg="../Compte_port.asp"
    strMsgChg="Mon Compte"
     
    End if%>
    A noter l'importance des crochets "[" qui sont ensuite un bon moyen de récupérer seulement le contenu à renvoyer aux clients grâce à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <%=(Mid(objASPError.Description,InStrRev(objASPError.Description,"]")+1))%>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Importer des données de Excel dans pages .ASP
    Par sperron dans le forum ASP
    Réponses: 8
    Dernier message: 24/03/2006, 16h31
  2. recupérer raiserror d'un trigger dans page asp
    Par julio_097 dans le forum Développement
    Réponses: 4
    Dernier message: 24/08/2005, 14h42
  3. [FrontPage 2003] Afficher éléments base Access dans page ASP
    Par laville dans le forum Autres langages
    Réponses: 3
    Dernier message: 03/08/2005, 09h27
  4. Problème requête SQL dans page ASP
    Par rocs dans le forum ASP
    Réponses: 14
    Dernier message: 26/07/2005, 15h38
  5. Intégration éditeur html dans page asp
    Par Crazyblinkgirl dans le forum ASP
    Réponses: 2
    Dernier message: 06/05/2004, 09h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo