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

VB 6 et antérieur Discussion :

[VB6] Gestion des erreurs dans une dll


Sujet :

VB 6 et antérieur

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [VB6] Gestion des erreurs dans une dll
    Bonjour developpez, voici mon premier post

    J'ai une application ASP 3.0 et je construis une dll en VB 6.0 pour faire tous les accès à ma BD (c'est un peu compliqué là, donc je vous épargne les détails )

    Actuellement j'envisage de retourner un code d'erreur à chaque appel de fonction.

    p.ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Function MyFunc(ByVal MyParam As String, ByRef MyResult As String) As Integer
      On Error Goto ErrHandling
      MyFunc = 0  
        '' My code here
      ErrHandling
        MyFunc = Err.Number
    End Function
    Le problème c'est que je dois synchroniser les N° d'erreurs entre VB est ASP et que je ne peux pas passer plus d'informations (par exemple la DSN ou un chemin vers un fichier)

    Quel est la meilleur pratique ?

    Cheers,
    zimba

  2. #2
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2004
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Salut. Si j'ai bien compris tu veux que tes fonctions contenues dans ton dll génère une erreur lorsqu'elles en rencontre une? Si c'est ça fait une petite recherche dans l'aide sur (Err.)Raise , sinon j'ai pas compris ce que tu attend

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Points : 502
    Points
    502
    Par défaut
    J'ai fait ca longtemps avant de passer a ASP.NET.

    Il faut gerer les erreurs en donnant des resultats negatifs a tes fonctions.


    Par exemple, si le retour d'une fonction est un numerique, tu pourrais generer un resultat de -1 pour erreur X, -2 pour erreur Y. Moi je les mets en groupes de 100 (-100, -200) afin de pouvoir ajouter des erreurs similaires par la suite.

    Pour les retour string ou objets, il faut definir des resultats soit NULL, vides ou contenant une valeur predefinie.

    Ou a chaque fois que tu cree une fonction, tu retourne une collection d'objets dont le premier objet est le retour et le deuxieme est la collection d'erreurs. C'est plus complique mais ca permet aussi de generer des diagnostiques de performance.

  4. #4
    Rédacteur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2002
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 608
    Points : 1 561
    Points
    1 561
    Par défaut
    Je suis pas d'accord avec toi Babyneedle, le err.raise me semble beaucoup mieux. Ca s'implifie le code dans la page asp puisque tu peux attraper l'erreur avec un on error goto et tu peux passer des informations dans la description de l'erreur.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    @Babyneedle: Merci, ta technique semble assez réaliste
    J'ai fait qqes tests aujourd'hui pour voir si je pouvais retourner le résultat pas référence et au final ça complique pas-mal les choses. Par exemple si je veux retourner un array, je suis obligé de passer le paramètre en variant.

    @Fulgy et Nightfall: Je vous rappèle que je suis en ASP3.0 et VB6.0
    A ma conaissance, on ne peut pas retourner des Err.Raise de VB6.0 ActiveX DLL --> ASP

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Points : 502
    Points
    502
    Par défaut
    Non,

    Chaque fonction renvoie un objet collection.

    Genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Set objOutils = CreateObject("MaDLL.clsOutils")
    colHeure = objOutils.DonnerHeure("Maintenant")
     
    If ColHeure(1).Item Is Nothing Then 'Pas d'erreur
     
    Else 'Erreur
     
    End If
    Dans la DLL

    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
    Public Function DonnerHeure(strOption as String) As Collection
      Dim colHeure as Collection
     
      On Error GoTo Err
     
      colHeure.Add Time()
     
      Set DonnerHeure = colHeure
      Exit Function
     
    Err:
     
      colHeure.Add -1
     
    End Function
    Alors quelque soit la valeur ou l'objet renvoye, en l'assignant en premier dans la collection, le conteneur en prend la nature. Et s'il n'existe pas de deuxieme element dans la collection, c'est qu'il n'y a pas eu d'erreurs.

    Aussi, une troisieme facon de faire qui n'est pas specifique aux DLL. Dans ta DLL, exporte la nature de l'erreur generee dans un fichier texte dans un folder specifique et des qu'une erreur est generee dans ASP, tu fais un redirect vers ce fichier pour connaitre la nature de l'erreur.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Yes t'assures

    En faite je parlais de mon idée initiale et j'avais bien compris.
    Ca va sans dire que avec qqe lignes de codes c encore plus clair

    Merci ! 8)

  8. #8
    Rédacteur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2002
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 608
    Points : 1 561
    Points
    1 561
    Par défaut
    Citation Envoyé par zimba-tm
    @Fulgy et Nightfall: Je vous rappèle que je suis en ASP3.0 et VB6.0
    A ma conaissance, on ne peut pas retourner des Err.Raise de VB6.0 ActiveX DLL --> ASP
    Mais si mais si ... Tu retournes pas quelque chose, tu crées une erreur que tu gères dans la page ASP.

    Exemple :

    Je fais une DLL ActiveX nommée TestAsp, qui contient une classe Test. Dans la classe, je mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Sub TestMethode()
     
    Err.Raise 500, "Test", "Test de méthode"
     
    End Sub
    Je fais une page ASP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <%
    set objet = Server.CreateObject("TestAsp.Test")
    objet.TestMethode
    set objet = nothing
    response.write "fin"
    %>
    J'obtiens :
    Test erreur '800a01f4'
    Test de méthode
    /test/test.asp, ligne 3
    Maintenant je modifie ma page ASP et je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <%
    set objet = Server.CreateObject("TestAsp.Test")
    on error resume next
    objet.TestMethode
    if err.number <> 0 then
        response.write "erreur " & err.number & " : " & err.description & "<br />"
    end if
    set objet = nothing
    response.write "fin"
    %>
    Et j'obtiens :
    erreur 500 : Test de méthode
    fin
    Je viens de le tester.

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Wow merci
    En effet, j'ai fait des tests, et ASP gère les objects Err.

    Par contre je me demande si c'est compatible avec d'autres languages. (C# p.ex)

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

Discussions similaires

  1. gestion des erreurs dans une transaction mysql
    Par ytoutou dans le forum Requêtes
    Réponses: 3
    Dernier message: 17/12/2010, 23h21
  2. Gestion des erreurs dans une boucle While
    Par Gregory.M dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/08/2008, 20h57
  3. gestion des TForm dans une DLL
    Par a_lincoln54 dans le forum C++
    Réponses: 0
    Dernier message: 06/04/2008, 18h15
  4. Gestion des erreurs dans une requête "IF"
    Par tineighty dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/10/2007, 18h22
  5. Gestion des erreurs dans une classe
    Par gregb34 dans le forum ASP.NET
    Réponses: 10
    Dernier message: 26/07/2007, 09h59

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