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

VBA Access Discussion :

Propagation d'erreurs d'un module de classe à l'autre [AC-97]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2008
    Messages : 97
    Par défaut Propagation d'erreurs d'un module de classe à l'autre
    Bonjour à tou(te)s

    J'ai un problème de propagation d'erreurs.

    J'ai un formulaire d'importation de données: Form_Import
    qui importe les données grâce à une méthode de ma classe business: CTraitementImport

    La méthode de form_import appelle CTraitementImport.Import() comme ceci:
    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
     
    Private Sub buttonImport_Click()
        Dim traitementImport As New CTraitementImport
        Dim defaultCursor As Integer
        defaultCursor = Screen.MousePointer
        Dim logger As New CLogger
        logger.SetLogger m_logger
     
    On Error GoTo Err_m_buttonImport_Click
     
            Dim msgBoxStyle As Integer
            msgBoxStyle = vbInformation Or vbYesNo Or vbDefaultButton2
            If (Validate()) Then
                If (vbYes = MsgBox("Etes vous sûr de vouloir importer les données issues de: " & vbCrLf & m_textBoxPath.value & vbCrLf & "le " & m_textBoxDate, msgBoxStyle, "Confirmation d'importation")) Then
                    Screen.MousePointer = 11
                    m_buttonImport.Enabled = False
     
                    traitementImport.Instanciate m_textBoxPath.value, m_textBoxName.value, m_textBoxDate.value, m_checkBoxReleased.value
                    traitementImport.Import logger
     
                    Screen.MousePointer = defaultCursor
                    MsgBox "L'import s'est terminé avec succes", vbOKOnly Or vbInformation, "Import Terminé"
                End If
            End If
     
     
    Default:
        m_buttonImport.Enabled = True
        Exit Sub
     
    Err_m_buttonImport_Click:
        Screen.MousePointer = defaultCursor
        MsgBox "Une erreur est survenue lors de l'importation: " & vbCrLf & Err.Number & ": " & Err.Description, vbCritical, "Importation des données"
        Resume Default
    End Sub

    CTraitementImport.Import pourrait ressembler à ceci:

    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
    Public Sub Import(logger As CLogger)
    On Error GoTo Error
        logger.Clear
        Dim wrkDefault As Workspace
        Set wrkDefault = DBEngine.Workspaces(0)
        wrkDefault.BeginTrans
     
        'plus toute une série d'instructions plus merveilleuses les unes que les autres
     
        logger.Append "L'import s'est terminé avec succes"
    Default:
        wrkDefault.Close
        Exit Sub
     
    Error:
        wrkDefault.Rollback
        Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile, Err.HelpContext
        Resume Default
    End Sub

    Comme vous pouvez le constater, je souhaite propager les erreurs générées dans ma méthode Import au module de classe appelant (Form_import) a l'instar d'un throw en C#


    Mais il s'avère que ça ne fonctionne pas. Access récupère l'erreur lui même et affiche sa messageBox permettant de débugger ou mettre fin à l'exécution (la même que si on fait un On Error GoTo 0 ou rien, finalement).

    Qu'ai je fait de mal ou pas fait de bien?

  2. #2
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    3 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 048
    Par défaut
    Peut-être une idée:
    Créer un type Erreur TErreur (Err.number, err.Description ...)

    et le passer à la methode Import
    dont l'appel devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    dim erreur1 as TErreur
    ...
     traitementImport.Import logger , erreur1
    ...
    et dans le code de Import

    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
    Public Sub Import(logger As CLogger, Erreur1 as TErreur)
    On Error GoTo Error
        logger.Clear
        Dim wrkDefault As Workspace
        Set wrkDefault = DBEngine.Workspaces(0)
        wrkDefault.BeginTrans
     
        'plus toute une série d'instructions plus merveilleuses les unes que les autres
     
        logger.Append "L'import s'est terminé avec succes"
    Default:
        wrkDefault.Close
        Exit Sub
     
    Error:
        wrkDefault.Rollback
    Erreur1.Number = Err.Number
    Erreur1.Description= Err.Description
    ...
        Resume Default
    End Sub
    A essayer

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2008
    Messages : 97
    Par défaut
    arf... oui ça marchera mais si je pouvais ne pas utiliser une variable à évaluer dans la méthode appelante ça m'arrangerait.

    Il n'y a vraiment pas moyen de propager l'erreur entre le module de classe appelant et appelé?

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2008
    Messages : 97
    Par défaut
    Si ça intéresse quelqu'un, voici la solution à mon problème:

    pour que les erreurs puissent être propagées hors d'un module de classe il faut aller dans:

    "Outils" > "Options ..."> Onglet "Avancé"

    et dans le groupe "Rattrapage d'erreurs"

    cocher "arrêt sur erreurs non gérables"
    ("Arrêt dans module de classe" est coché par défaut)

    Voilà voilà.

    Merci pour votre honorable contribution


    Note: l'option "Rattrapage d'erreurs" n'est pas liée au projet et se réinitialise à chaque démarrage d'access.

    Il est possible de l'activer programmatiquement comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.SetOption "Error Trapping", 2

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

Discussions similaires

  1. Gestion erreur dans module de class E97
    Par Eric_03 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/12/2008, 16h45
  2. erreur avec withevents dans un module de classe
    Par patbou dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/12/2007, 04h32
  3. variables publiques ou module de classe ?
    Par niclalex dans le forum Access
    Réponses: 3
    Dernier message: 04/10/2005, 18h49
  4. [ERREUR] Ne retrouve pas la classe main
    Par Anathema dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 06/07/2005, 16h16
  5. Réponses: 9
    Dernier message: 27/04/2004, 11h01

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