truc2geek

2013/08/11

Carnet d’Adresse, part 12 : v0_012 (MajData, part 2)

Filed under: Carnet d'adresses (Python), Programmation, Python, SQLite — Étiquettes : — truc2geek @ 19:54

La dernière fois, on a développé le code permettant d’extraire une donnée de la DB, et celui permettant d’afficher une donnée.
La suite logique était de permettre à l’utilisateur de saisir de nouvelles valeurs, mais on va se contenter
pour cette fois, de corriger quelques bugs.

corriger la fonction ValidChoix2

En testant l’appli, je me suis rendu compte qu’une saisie a été acceptée malgré une erreur de frappe.

Cela concerne le choix dans le menu de gestion des adresses, et les autres menus de gestion de données sont forcément impactés par ce bug, puisque la fonction générique GererData() affiche le menu de gestion et gère le choix saisi pour tous les types de données.

Voici l’impression écran de ma saisie :
01.gif

J’ai voulu saisir « 2 7 », pour indiquer que je voulais modifier l’adresse 7.
Ma saisie a été acceptée et correctement interprétée, mais il faut corriger ça :

Voici un extrait de la fonction GererData() :
02.gif

On fait appel à la fonction ValidChoix2 pour demander et interpréter la saisie de l’utilisateur.

Voici le code presque complet de la fonction ValidChoix2 :
03.gif

Le bug est complètement logique : on regarde si le premier caractère, qui correspond à la manipulation choisie, implique la saisie d’un numéro de donnée.
Pour mettre à jour ou supprimer une donnée, il faut indiquer laquelle, jusque là tout va bien.
L’erreur se situe à l’étape suivante : si on a demandé une modification ou une suppression, le code extrait le numéro de la donnée concernée, qui commence au 3e caractère de la saisie.
A aucun moment, on ne vérifie que le deuxième caractère est bien un espace!
Ce bug ne pose pas de grave problème : pas d’erreur d’interprétation sur le type de manipulation à effectuer ni sur la donnée à manipuler ; il se corrige simplement comme suit :
06.gif

corriger la fonction Saisie

Là encore c’est une question de traitement de la saisie.
Dans cette fonction qui est utilisée quand l’utilisateur crée une donnée, la logique est étrange et surtout l’utilisateur n’est pas informé de cette logique.
Pour tout champ, qu’il soit obligatoire ou facultatif, si une valeur par défaut est paramétrée et que l’utilisateur ne renseigne aucune donnée, alors la valeur par défaut est automatiquement prise en compte.
Voici la version actuelle de ce code :
13.gif

Les valeurs par défaut sont paramétrées dans la fonction DefData, voir ci-dessous :
Un seul champ a une valeur par défaut, le champ ‘nb_personne’ pour les groupes, et c’est un champ calculé (au sens ‘calculé par Python’, l’utilisateur ne renseigne pas ce champ).
Donc aucune incidence en l’état actuel de l’application.
12.gif

On indique à l’utilisateur comment sélectionner la valeur par défaut sans devoir la saisir :
15.gif

et la suite :
16.gif

On va tester cette fonction dans le shell de l’IDE.
Ce sera facilité par le fait qu’elle n’utilise ni de variable globale, ni d’autre fonction de l’application.
Il suffit donc de copier-coller la fonction dans un nouveau fichier, qu’on enregistre par exemple « Saisie_Test1.py ».

On place juste sur la première ligne, l’instruction pour indiquer que l’encodage est utf-8 :
17.gif

Ce fichier est disponible ici.

Premier essai, et petit problème au sujet de l’encodage :
18.gif

On regarde quel est l’encodage du fichier, on le convertit, on enregistre sous « Saisie_Test2.py » : :
19.gif

21.gif

2e essai :
22.gif

l’import a réussi, on peut tester la fonction :
24.gif

23.gif

Cette session de chasse aux bugs est très intéressante, on en découvre toujours plus!
Ici on a une variable globale non déclarée.
Voici la correction de cette erreur :
25.gif

3e essai donc :
c’est déjà mieux, pas de bug et en plus, on a le résultat attendu.
26.gif

avec une valeur trop longue, ici 11 caractères : résultat ok :
27.gif

avec une valeur vide, devrait être refusée : résultat ok :
28.gif

et enfin avec une valeur valide, ce serait bien qu’elle soit acceptée : elle est acceptée, ok!
29.gif

Pour une valeur toujours obligatoire, mais avec une valeur par défaut :
30.gif

Encore une correction à faire!

Vu le message, on corrige comme ça :
31.gif
32.gif

Et on arrive donc à la 4e version de ce fichier de test : Saisie_Test4.py

utilisation des listes

Dans la future version de la fonction MajData(), on effectue une copie de liste.
Je me suis aperçu d’une particularité lorsqu’on copie une liste dans une nouvelle liste, je reproduis le phénomène paranormal dans le shell :
07.gif

on continue :
08.gif

Voilà, c’est clair : quand on crée une liste en copiant une autre liste, les deux listes ne sont en fait qu’une seule et même liste.
On a simplement deux variables qui pointent sur les mêmes données… c’est génial, mais si on veut avoir deux listes différentes?
Parce que la baleine qui fait 4 kg, ben normalement non.

Un très bon tuto a été publié sur Développez.com, voici le lien vers la partie qui nous intéresse :
La première solution est utilisable uniquement sur les listes à une dimension, mais pour l’instant on n’a pas besoin de copier des listes à plusieurs dimensions, donc on va tester cette solution :
09.gif

Ce test permet de voir que la liste vListe2 est bien une copie de la liste vListe1, mais cette fois elles sont bien indépendantes : la modification de valeurs dans vListe2 n’a aucun impact sur les valeurs de vListe1.

Prochaine étape

Cette fois, la prochaine étape devrait vraiment concerner la saisie de nouvelles valeurs lors de la mise à jour de données.

Le code de cette version, v0-012 : CarnetAdresse_v0_012.py
La DB : CarnetAdresse.db

Publicités

Laisser un commentaire »

Aucun commentaire pour l’instant.

RSS feed for comments on this post. TrackBack URI

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Propulsé par WordPress.com.

%d blogueurs aiment cette page :