truc2geek

2012/12/02

Carnet d’Adresse, part 8 : v0_009 (CreaData, 3e version)

On reprend l’appli dans son état à la fin de l’article précédent, on supprime les « tags » #NEW #MAJ et #SUPP etc.
Voici donc le code duquel on part.
L’appli permet de créer les adresses, passons à la création des groupes.

paramétrage pour les groupes

Pour rappel, voici l’instruction SQL par laquelle on a créé la table contenant les groupes, « T_d_Groupe » :

L’utilisateur devra renseigner un seul champ : « nom ».
Le champ « nb_personne » sera calculé automatiquement quand l’utilisateur ajoutera ou supprimera des personnes aux groupes.

Il faut s’assurer que dans tous les endroits dans le code où c’est nécessaire, les données « groupe » sont prises en compte.

D’abord, dans la variable globale qui liste les types de données :

ok.

Ensuite, dans la fonction Principal :

On ajoute le traitement du choix ‘4’ : appel de la fonction GererData avec ‘groupe’ comme argument :

Au niveau de la fonction InfoData :

ok, pour le nom de la table comme pour la requête de sélection.

Au niveau de la fonction DefData :

ok : la description des champs est bien présente et correspond à la table T_d_Groupe.

dans la fonction CreaData : rien à modifier.

dans la fonction GererData, le code qui affiche les enregistrements existants :

On affiche uniquement le premier champ, row[0] qui est « id_groupe ».

On affiche donc l’identifiant du groupe, son nom et le nombre de personnes qui lui sont rattachées.

Toujours dans GererData, le code qui selon le type de donnée, appelle CreaData ou indique que le type de
données n’est pas traité.

Après modif :

test

On lance l’application :

On entre « 1 » puis « 4 » pour afficher le menu de gestion des groupes :

On entre « 1 » pour créer un groupe :

1er point : « création de groupe » est affiché deux fois, il faudra supprimer l’un de ces affichages.

Avant d’aller plus loin, on va juste ouvrir la table « T_d_Adresse » pour vérifier le contenu :

Ok, on retrouve bien les mêmes 4 groupes, avec chacun la valeur 0 pour le champ « nb_personne ».

On revient à la création de groupe, on saisit le nom du nouveau groupe, par exemple « voisins », on valide… et ça plante.

debug

Autant commencer par supprimer l’un des deux affichages de « création de groupe » :
Comme on le voit ci-dessous, ils sont tous les deux dans la fonction CreaData :

On supprime par exemple le deuxième print.

Maintenant il faut trouver le bug, on place quelques « raw_input » :

On lance l’appli, on entre « 1 » puis « 4 » puis « 1 » :

  • l’information « création de groupe » apparaît bien une seule fois
  • on est bien invité à saisir le nom du groupe

On entre « voisins » et on valide :
« BUG 4x » est affiché, on valide, « BUG 5 » est affiché, on valide, ça plante.

On rajoute quelques « raw_input » et on recommence :

Tout se passe bien jusqu’à la constitution de la requête SQL entière, puis ça plante :

La requête SQL semble bien, on compare à l’instruction SQL qui a créé la table « T_d_Groupe » :
ok, le champ « nb_personne » doit impérativement être renseigné, or il ne l’est pas dans notre requête.
On a exclu ce champ de la liste des champs pour lesquels l’utilisateur doit saisir une valeur : c’était la bonne chose
à faire puisque ce champ doit être calculé automatiquement, mais il faut lui donner une valeur lors de la création, et cette
valeur doit bien sûr être 0 (aucune « personne » n’est encore rattachée à un groupe que l’on vient de créer).

Il faut donc modifier le code, et d’une manière intelligente : on rencontrera sans doute encore le cas d’un champ qui doit
impérativement contenir une valeur, mais que l’utilisateur ne doit pas renseigner.

Solution n° 1 :
elle est évidente : définir la valeur par défaut de ce champ directement dans la Base de Données.

Solution n° 2 :
si on préfère gérer ça au niveau du code : on peut modifier les fonctions DefData() et CreaData() :
dans DefData, prendre en compte ce champ « nb_personne » dans toutes les listes et renseigner la valeur par défaut pour ce champ dans la liste vLChampVal ;
et dans CreaData, il faudrait pour chaque champ : si on a une valeur pour ce champ dans vLChampVal, on renseignera cette valeur et on ne demande rien
à l’utilisateur ; sinon on demande à l’utilisateur de saisir une valeur.

Appliquer solution n° 2

Modifier la définition des données, fonction DefData, pour le type « groupe » :

modifier définition de données

Modifier CreaData :

modif fonction CreaData

Test :

On lance l’application, on entre « 1 » puis « 4 » :

affichage menu gestion groupes

On entre « 1 » pour créer un groupe, on tape « entrée » à chaque raw_input, on entre le nom du groupe :

création groupe

les différentes parties de la requête puis la requête complète s’affichent, et semblent ok :

affichages raw_input

pas de plantage, on revient bien au menu Principal.

retour menu Principal

On affiche le menu de gestion des groupes, pour vérifier que le groupe « voisins » a bien été créé :

vérif création du groupe

La crétion du groupe a bien été prise en compte, oh yeah!!

Vous pouvez télécharger cette version, v0_009_01.py, ici, et la BD ici.

création des personnes

pour rappel, voici l’instruction SQL par laquelle on a créé la table des personnes, « T_d_Personne » :

instruction SQL création table T_d_Personne

Un champ va demander un traitement particulier : « id_adresse »
C’est un champ clé étrangère, il accepte comme valeur toute valeur existante dans le champ clé primaire correspondant, donc dans le champ « id_adresse » de la table « T_d_Adresse ».
On rattache donc chaque personne à une adresse.

Pour que l’utilisateur puisse renseigner ce champ, il faut lui présenter la liste des adresses existantes, et lui demander d’en sélectionner une.

On va donc créer une fonction nommée SelecId :
fonction SelecId - 1
fonction SelecId - 2

On modifie CreaData :

modif fonction CreaData
modif fonction CreaData - 2

Modif GererData :

modif fonction GererData

Modif ValidChoix, encodage :

modif fonction ValidChoix

Modif ValidChoix2, encodage :

modif fonction ValidChoix2

test

on lance l’appli, on entre « 1 » puis « 5 » pour afficher le menu de gestion des personnes

menu gestion des personnes

on entre « 1 » pour créer une personne, on renseigne le prénom, le nom

création personne - 1

on sélectionne l’adresse :

création personne - 2

on est redirigé vers le menu Principal :

redirigé vers le menu principal

Pour vérifier que la création a bien été prise en compte, on affiche le menu de gestion des personnes :

vérification création effectuée

Joe Lecowboy est bien là, OK !!

On enregistre cette version sous le nom CarnetAdresse_v0_009.02.py.
Les fichiers sont disponibles : ici pour l’appli, ici pour la BD.

On peut désormais afficher le menu et créer une donnée pour les adresses, les personnes et les groupes.
Notez qu’on ne lie pas encore les personnes aux groupes, ce sera pour plus tard.
De même, on ne peut ni modifier ni supprimer les données.

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 :