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 :

Debug application access


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 127
    Par défaut Debug application access
    Bonjour

    malgré le debogage et la compilation sous access 2007 (complet), mon appli se plante sur un poste dont seul la version runtime 2007 est installée.
    idem sur poste avec runtim2007 et office 2007 familiale

    sur le poste de dev, la version accdr fonctionne bien

    comment debugguer pour trouver ces problemes avec access 2007 complet?

  2. #2
    Membre chevronné Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Par défaut
    Bonjour,

    Il existe plusieurs méthodes de débuggage. Dans le VBE avant de lancer l'application il est possible de placer des "break points" dans le code grace à la touche F9. L'execution s'arrêtra sur la ligne où a été posé le break point. Il suffit de réappuyer sur la même touche pour l'enlever (il faut au préalable que le curseur se trouve sur la ligne avant de faire la modification).

    Il est possible aussi de positionner des instructions "Stop" dans le code qui ont le même effet.

    Ensuite la touche F8 sert à executer les instructions les une après les autres. MAj + F8 Permet d'executer un appel complet de méthode(s) situé sur la ligne qui doit être executée.

    Autres points utiles sont les fenêtres de déboguage, Affichage->Fenetre Espion et Affichage->Fenetre d'execution.

    La fenetre espion permet de voir l'état d'une variable ou d'un objet en faisant un glisser déplacer du nom de la variable / objet dans cette fenetre.

    La fenetre d'execution permet de voir la sortie de débuggage. Par exemple l'instruction suivante
    écrit xxx dans cette fenêtre.
    Cette fenêtre est aussi très utile pour tester/executer des méthodes ou avoir la valeur d'une variable, par exemple ceci :
    retourne le chemin du projet courrant

    Il ne faut pas oublier les tests unitaires avec l'instruction "Assert". Les tests unitaires doivent être écrit avant d'écrire le code pour vérifier les contraintes métiers et applicatives. Pour faire simple cette instruction permet de vérifier l'état / la valeur d'une variable en la placant dans un certain contexte.
    Le but du jeu est de couvrir un maximum de contexte possible pour un objet / variable pour s'assurer de son bon fonctionnement dans toutes les situations de l'application.

    voici un exemple de test unitaire :

    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
    51
    52
    53
    54
    55
    Private onglet As GestOnglet
     
    Public Sub runTests()
      initializations
      testsAEffectuer
      fermetureDesObjets
      Debug.Print "tests completed"
    End Sub
     
    Private Sub initializations()
      Set onglet = New GestOngletMenu
      DoCmd.OpenForm "Frm_Menu", acDesign
      DoCmd.OpenForm "Frm_Ecouteur_UI", acDesign
      onglet.create getOngletVideStructure, "TestOnglet"
    End Sub
     
    Private Sub testsAEffectuer()
      Debug.Assert testName
    End Sub
     
    Private Function getOngletVideStructure() As ONGLET_COMPOSE
      With getOngletVideStructure
        Set .objets.imageDebut = Forms("Frm_Menu").Controls("I_Onglet1_Debut")
        Set .objets.imageMilieu = Forms("Frm_Menu").Controls("I_Onglet1_Milieu")
        Set .objets.imageFin = Forms("Frm_Menu").Controls("I_Onglet1_Fin")
        Set .objets.Label = Forms("Frm_Menu").Controls("Lbl_Onglet1")
        Set .objets.bouton = Forms("Frm_Menu").Controls("Btn_Onglet1")
        .placement.haut = 0
        .placement.gauche = 1235
        .placement.largeur = 1230
        .placement.hauteur = 225
        .std.debut = "Img_OngletDebutStd"
        .std.milieu = "Img_OngletMillieuStd"
        .std.fin = "Img_OngletFinStd"
        .survol.debut = "Img_OngletDebutSurvol"
        .survol.milieu = "Img_OngletMillieuSurvol"
        .survol.fin = "Img_OngletFinSurvol"
        .actif.debut = "Img_OngletDebutActif"
        .actif.milieu = "Img_OngletMillieuActif"
        .actif.fin = "Img_OngletFinActif"
      End With
    End Function
     
    Private Function testName() As Boolean
    On Error GoTo Err
      onglet.Name = "Test"
      If onglet.Name = "Test" Then
        testName = True
      Else: messageDeTest "testName", onglet.Name, "Test"
      End If
      Exit Function
    Err:
      Debug.Print "testName " & Err.Description
      testName = False
    End Function
    Cet exemple (qui ne comprends qu'un seul test ici) test un objet qui gère des onglets.

    Pour plus de détails une recherche s'impose.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 127
    Par défaut
    à prori, en ayant mis un certain nombre de données entre debug, mon pb serait peut être lié à un pb SQL et vba .....

    le message runtime est le suivant :
    Fonction non disponible dans les expressions "Mid([table_devis]![devis_num],1,len([table_devis]![devis_num])-4"

    la requete est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT Mid([Table_DEVIS]![Devis_Num]
    ,1,Len([Table_DEVIS]![Devis_Num])-4) AS numv
    , Max(Right([Table_DEVIS]![Devis_Num],3)) AS NUMDEV 
    FROM Table_DEVIS 
    GROUP BY Mid([Table_DEVIS]![Devis_Num]
    ,1,Len([Devis_Num])-4) 
    HAVING ((Mid([Table_DEVIS]![Devis_Num]
    ,1
    ,Len([Table_DEVIS]![Devis_Num])-4))='" & NUM_DEVIS_EN_COURS & "');
    je ne comprends pas !!!!

  4. #4
    Membre chevronné Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Par défaut
    On dirait qu'il manque des parenthèses et une fonction entre la deuxième et troisième ligne de code.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 127
    Par défaut
    Citation Envoyé par Tonioyo Voir le message
    On dirait qu'il manque des parenthèses et une fonction entre la deuxième et troisième ligne de code.
    je vais regarder.... mais ça n'explique pas pourquoi ça fonctionne très bien en version complète access.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 127
    Par défaut
    Citation Envoyé par gwent Voir le message
    je vais regarder.... mais ça n'explique pas pourquoi ça fonctionne très bien en version complète access.
    A priori, il ne manque pas de paranthèse !!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT 
    Mid([Devis_Num],1,Len([Devis_Num])-4) AS numv, 
    Max(Right([Devis_Num],3)) AS NUMDEV 
    FROM 
    Table_DEVIS 
    GROUP BY 
    Mid([Devis_Num],1,Len([Devis_Num])-4) 
    HAVING 
    ((
    (Mid([Devis_Num],1,Len([Devis_Num])-4))
    ='" & NUM_DEVIS_EN_COURS & "'));



    je ne comprend pas !!!!


    ps, assert, ça sert à quoi exactement?

Discussions similaires

  1. comment diviser mon application access en 2 partie
    Par Soulghard dans le forum Access
    Réponses: 4
    Dernier message: 10/01/2006, 10h26
  2. ouvrir une application access périodiquement
    Par cheucheu dans le forum Access
    Réponses: 6
    Dernier message: 22/12/2005, 16h53
  3. Synchronisation d'applications Access
    Par r@phy dans le forum Access
    Réponses: 14
    Dernier message: 12/12/2005, 09h53
  4. Option Debug dans access
    Par uskiki85 dans le forum Access
    Réponses: 11
    Dernier message: 26/09/2005, 15h15
  5. Debug application multi thread
    Par Razowsky dans le forum MFC
    Réponses: 1
    Dernier message: 03/05/2005, 18h14

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