truc2geek

2013/05/20

CarnetAdresse, part 11 : v0_011 (MajData, part 1)

Filed under: Carnet d'adresses (Python), Programmation, Projets, Python, SQLite — Étiquettes : — truc2geek @ 00:18

Suite du projet de l’application CarnetAdresse en Python avec SQLite3 : l’utilisateur peut déjà créer et supprimer des données.
On va commencer à mettre en place la mise à jour des données.

conception

Lorsque l’utilisateur voudra modifier une donnée, le déroulement sera le suivant :

on lui affiche en détail la donnée dans son état actuel
pour chaque champ, on lui demande d’entrer la nouvelle valeur ; il faut pouvoir aussi simplement garder la valeur actuelle
afficher en détail la donnée dans son état si la modification est validée
demander à l’utilisateur s’il souhaite confirmer ou annuler la modification
effectuer la modification dans la DB
informer du bon déroulement

Dans cet article, on va uniquement s’occuper d’extraire puis afficher la donnée.

créer la vue V_Personne

pour les adresses et les groupes, on prendra les données directement dans la table.
pour les personnes, on va créer une vue (une requête de sélection) qui donnera directement les données de la personne elle-même et de son adresse.

tester la requête

le SQL de création de cette vue :
22.gif

on commence par tester cette requête, via le logiciel SQLite Expert
on lance SQLite Expert et on ouvre la DB :
07.gif

clic sur l’onglet ‘SQL’, la dernière requête SQL exécutée par SQLite Expert s’affiche.
on copie-colle la requête de création de V_Personne, on clique sur ‘Execute SQL’, la nouvelle requête apparaît sur la gauche :
23.gif

on sélectionne la requête, puis l’onglet ‘Data’ pour visualiser le résultat :
24.gif

on va voir le contenu de la table T_d_Personne pour comparer :
ok
25.gif

26.gif

mettre en place :

pour garder une trace de la création de cette vue, on va la supprimer (dans SQLite Expert, clic droit puis ‘Delete’),
puis écrire la requête dans un fichier texte qu’on exécutera ensuite via le shell, comme on l’a fait au début du projet
avec les fichiers texte isql1.txt et isql2.txt.
Ce nouveau fichier texte sera ‘isql3.txt’, il est disponible ici.

exécution via la console DOS :
27.gif

on vérifie avec SQLite Expert :
29.gif

ok.

le code

On a déjà prévu qu’il faudra afficher la donnée telle que stockée en base, et ensuite après avoir demandé à l’utilisateur
d’entrer les nouvelles valeurs, l’afficher avec les nouvelles valeurs.

On va donc créer deux fonctions principalement : une pour extraire une donnée de la DB, une autre pour l’afficher.

extraire la donnée

La fonction DefDataExtraire sera aussi créée, elle donnera à la fonction ExtraitDeDB les informations nécessaires :
33.gif

Cette fonction retourne une liste contenant 5 informations : une chaîne, deux tuples et deux listes.
La chaîne contient le début de la requête SQL
Le premier tuple contient le nom des champs dans la Base de Données
Le second tuple contient un nom raccourci des champs
Les deux listes seront utilisée par la fonction ExtraitDeDB pour stocker respectivement l’indice de chaque champ dans la requête,
et la valeur de chaque champ pour la donnée qu’il faudra afficher.

La fonction ExtraitDeDB :
34.gif

On commence donc par récupérer les données de « définition d’extraction »

On commence donc par récupérer les données de « définition d’extraction »
Puis on récupère le nom du champ qui est la clé primaire pour ce type de donnée, on concatène la requête SQL et l’exécute

On détermine le nombre de champs à traiter
Ensuite on doit établir la correspondance entre le nom des champs et leur indice dans la requête, puisqu’on fait référence aux champs uniquement par leur indice.
Il ne nous reste plus qu’à récupérer la valeur de chaque champ, et enfin retourner une liste contenant :
un tuple tel qu’on l’a récupéré de la fonction DefDataExtraire
une liste contenant les valeurs de la donnée qu’on devra afficher à l’utilisateur

curs.description

On récupère le nom des champs (entre autres) par curs.description.

Pour illustrer l’utilité de curs.description, ci-dessous j’ai ajouté une instruction (en prenant l’application telle qu’elle est à la fin de cet article).
Si on ajoute l’instruction suivante, pour voir le contenu de curs.description :
35.gif

on obtient :
36.gif

Dans l’exemple ci-dessus, ‘prenom’ est le 2e champ, son indice sera donc 1 puisque l’indice des champs commence à 0.

afficher la donnée

On va créer trois fonctions pour cette partie :

  • DefDataAfficher
  • InfoSpecial
  • AfficherData

La fonction DefDataAfficher retourne les informations nécessaires à l’affichage des données :
un tuple contenant le libellé de chaque champ tel qu’il sera affiché
une liste contenant une « info spéciale »

32.gif

pour afficher l’adresse qui est liée à une personne, si on se contente d’afficher à l’utilisateur la valeur stockée en base dans le champ ‘id_adresse’, par exemple 2, c’est insignifiant.
Cette « info spéciale » sert à indiquer à la fonction AfficherData ce qu’il faut afficher à la place.
Par exemple, ici j’ai pensé qu’une chaîne contenant la valeur des champs ‘cp’, ‘ville’ et ‘adresse1’ était plus claire.

La fonction InfoSpecial est appelée par la fonction AfficherData ; à partir de l’info spéciale, elle retourne la chaîne à afficher
37.gif

Et enfin, la fonction AfficherData :
38.gif

MajData et GererData

La fonction MajData :
40.gif

Dans cette version, la fonction MajData ne fait qu’extraire la donnée de la DB, et donc dans son état actuel, pour l’afficher à l’utilisateur.

et l’appel de la fonction MajData, depuis la fonction GererData :
39.gif

tester le tout

pour une donnée de type adresse :

41.gif

42.gif

pour une donnée de type personne :

43.gif

44.gif

Carnet Adresse v0-011

Sont disponibles ci-dessous :

Dans le prochain article, on va coder la suite : demander à l’utilisateur de saisir les nouvelles valeurs.

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 :