>>>> Merci de noter toutes remarques concernant ce cours dans le sujet parallèle : [Cours papyturbo]Commentaires, remarques et suggestions
-------------------------------------------------------------------------
Ce cours est la suite
- du [Cours pt-01][Débutants]Analyse structure base de données simple et
- du [Cours pt-02][Débutants]Requête avec plusieurs sommes
- et représente une "pause" dans le déroulement du [Cours pt-03]turbo-formulaire (les bases), pause destinée à défricher les bases du débogage avant de retourner finir notre formulaire.
Il commence donc par une réponse aux questions posées par Serge57, dans la réponse #10 du cours précédent (le 03),
et nous travaillons à partir du dernier .mdb : SuiviAffaire 2006-08-17.zip (89,0 ko) -------------------------------------------------------------------------
Zzzzzzap!, zoooing ! tiou tiou tiou tiou, sortez vos lasers quantiques et vos tromblons zappeurs, enfilez le costard de Blade Runner, on part à la chasse aux bugs, en espérant que ce ne soient pas eux qui nous flinguent les premiers.
D'abord, se référer au débat [Conseils] Comment retrouver un problème , qui traite de ce sujet assez à fond. Il contient tous les principaux aspects du débogage et mérite d'être relu par tous.
Ici, nous détaillerons surtout les étapes de base pour débutants.
----------------
Je reprends le bug déjà signalé et apparemment corrigé dans la réponse #9.
La 1ère étape consiste à identifier le bug. Si un message d'erreur s'affiche, facile. Là, ce n'était le cas qu'à condition de faire des tests. En l'occurence, réduire le formulaire à sa taille la plus petite, à partir du coin inférieur droit (mais également : le passer en plein écran, puis en réduction, etc.)
La 2ème étape, c'est le travail du beta testeur qui doit décrire aux développeurs "Comment reproduire le bug". En tant que développeurs, on doit au moins savoir faire cela, et ça a consisté en (dans la réponse #9 du cours 03) :
Je n'ai peut être pas été assez clair, donc, pour reproduire le bug, avec ta dernière version du .mdb :
1- démarrer l'application 'Affaires'
2- agrandir Access en plein écran,
3- réduire le formulaire Affaires, pour pouvoir le redimensionner à la souris,
4- saisir le bord inférieur, et remonter jusqu'à ce que la section détail, qui contient le sous-formulaire ssfAffaires, disparaisse.
Dès qu'il disparaît complètement, on a une erreur 2100 'Contrôle ou sous-formulaire trop grand.'
La 3ème étape consiste à comprendre ce qu'il se passe et, lors de l'affichage du message, j'ai une boîte de dialogue avec le message et 2 boutons actifs : Fin (on arrête tout, sans commentaire) ou Débogage (clic)
Le bouton Débogage m'amène sur une ligne de code jaune, la ligne qui provoque l'erreur :
Là, je regarde les 2 valeurs qui pourraient être concernées.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Me.Section(acDetail).Height = NewHeight
Pour ça, les techniques de base sont :
- laisser la souris au dessus du nom d'une variable, comme 'NewHeight' : sa valeur s'affiche dans une bulle.
Ça ne marche pas toujours pour une expression plus complexe, comme 'Me.Section(acDetail).Height (si la souris est au dessus de 'acDetail', la bulle affiche 'acDetail = 0', ce qui ne nous intéresse pas). Donc :
- sélectionner l'expression et appuyer sur Maj+F9 : la valeur s'affiche dans une boîte de dialogue.
Troisième méthode :
- ouvrir la fenêtre de débogage avec Ctrl+G, et, dans la fenêtre d'exécution qui s'ouvre sous le code, taper un '?' suivi d'un espace et de la valeur, le nom de la variable ou l'expression à évaluer :
Maintenant, je sais que
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ? Me.Section(acDetail).Height 105
- ma section détail, avant le Form_resize, mesurait 105 twips en hauteur,
- la variable NewHeight est négative (-5).
D'où vient cette NewHeight négative ?
Elle est calculée au dessus, en gros :On peut ignorer la section acFooter, dont la hauteur est 0.
Code : Sélectionner tout - Visualiser dans une fenêtre à part NewHeight = Me.InsideHeight - Me.Section(acHeader).Height
Ce qui veut juste dire que je suis remonté tellement vite que InsideHeight (la fenêtre) est plus petit que la section acHeader (l'en-tête du formulaire).
4ème étape : trouver la solution.
Il paraît ici évident qu'on ne peut pas demander à Access de dessiner une section Détails dont la hauteur serait négative !
D'où, solution :
On ne va ajuster la hauteur de la section détails que si elle est positive.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 If NewHeight > 0 Then Me.Section(acDetail).Height = NewHeight .Height = NewHeight - (.Top * 2) End If
5ème étape : documenter le probème.
Et ça devient :
Étape qu'on oublie trop souvent, indispensable pour permettre de se relire quelques mois plus tard.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 'Pour empêcher l'erreur de dimensionnement du formulaire (erreur 2100) If NewHeight > 0 Then Me.Section(acDetail).Height = NewHeight .Height = NewHeight - (.Top * 2) End If
Trop de commentaires tueraient les commentaires ?
Peut être, mais il en faut beaucoup pour que ce soit trop et au minimum, il faut signaler toute correction de bug ou de message d'erreur, comme ici.
---------------------
Voilà, en 5 étapes, comment le premier message d'erreur a été "corrigé".
Et tu me signales qu'il est encore là ?
Mais c'est pas croyable, ça.Envoyé par Serge57
Donc, même méthode -> reste plus qu'à trouver la solution appropriée ?
Partager