truc2geek

2013/10/21

Carnet d’Adresse, part 14 : v0_014 (liens personnes – groupes)

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

Aujourd’hui est un grand jour : on va faire un premier pas pour gérer les liens entre les personnes et les groupes de contacts de notre carnet d’adresse. Yeah!!

Quelques impressions écran de la DB vue par SQLite Expert :

la table T_d_Groupe :
01.gif

la table T_d_Personne :
02.gif

la table T_p_Groupe :
03.gif

Au niveau de la DB, on a déjà une table qui relie les personnes aux groupes, et elle comporte déjà des données.
Première chose à faire : dans l’application, permettre de voir, pour un groupe, la liste des personnes qui y sont rattachées.

Requête périmètre groupe

On crée une requête dans la DB :
05.gif

Au passage, on note que l’instruction « .header ON » ne fonctionne pas si on la termine par un point-virgule.

Pour vérifier si cette requête correspond à ce qu’il nous faut, comparer ce qu’elle retourne à ce qu’on trouve si on demande la même chose mais « à la main » :
on commence par trier le contenu de la table T_p_Groupe par id-groupe croissant :
Le groupe 4 a deux personnes dans son périmètre : les personnes 7 et 8.
Affichons ces deux personnes :
06.gif

On affiche le contenu de la requête V_Test1, filtré sur l’id_groupe 4 : si tout va bien, on aura Hugues et Tiffany :
07.gif

Ok.

Un autre test : on peut voir que la personne 6 est liée à deux groupes, on va voir si on retrouve ces deux liens dans V_Test1 :
08.gif
09.gif

On retrouve bien les deux enregistrements : Ok! Reste à renommer la requête V_Test1, en V_p_Groupe par exemple :
10.gif

Une erreur se produit, peut-être que « ALTER VIEW » n’est pas possible.
Un autre moyen très simple d’arriver à la même chose, via SQLite Expert :

On sélectionne la vue « V_Test1 », et on récupère sur l’onglet « DDL » l’instruction SQL qu’on a entrée via la console :
11.gif

On sélectionne l’onglet « SQL », copier-coller de l’instruction SQL, on modifie le nom de la vue et tant qu’on y est, on ajoute les champs crea et maj :
13.gif

On a juste à faire « Execute SQL », la vue est créée, voici le résultat :
14.gif

Pour garder un historique, on enregistre l’instruction SQL dans le fichier qu’on nomme isql4.txt.

Le champ nb_personne

La table T_d_Groupe a un champ nommé « nb_personne », qui contient la valeur 0 pour tous les enregistrements alors que des personnes sont bien rattachées à des groupes. Il n’existe qu’un groupe, le 5, « voisins », auquel aucune personne n’est rattachée.

Pour renseigner les autres, on va écrire un bout de code, une nouvelle fonction qu’on appellera depuis le menu Principal.

COUNT

Cette page de la documentation SQLite renseigne sur l’utilisation de COUNT (et des autres fonctions d’agrégat) :

Test :
15.gif

Afficher le résultat pour chaque groupe

La fonction MajNbPersonneParGroupe(), dans sa version ci-dessous, ne fait que boucler sur les groupes et pour chacun, récupérer
le nombre de personnes liées grâce à la fonction COUNT, et l’afficher :
16.gif

On modifie la fonction Principal() :
17.gif

Voici le résultat, ici l’application a été exécutée via le shell de l’IDLE :
18.gif

Pour vérifier, le contenu de la table T_p_Groupe trié par id_groupe :
on compte bien 4 personnes liées au groupe 1, 3 liées au groupe 2 et ainsi de suite : tout est ok.
19.gif

Mettre à jour le champ nb_personne

On complète la fonction MajNbPersonneParGroupe() :
La 1e étape reste la même : pour chaque groupe existant, récupérer et afficher le nombre de personnes rattachées
2e étape : itérer sur les groupes, et pour chacun, effectuer la mise à jour
3e étape : itérer sur les groupes, et afficher la valeur du champ nb_personne, pour comparer avec la 1e étape

Le code de la fonction :
21.gif

Résultat :
20.gif

la fin…

pas du monde, mais de l’avancement du projet pour aujourd’hui.

Voici les liens pour les fichiers de cette version, la v0_014 :
l’application
la DB
le fichier isql4.txt

Oh yeah!!

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 :