Atelier Access - cration d'une base de gestion de disques audio.
Réponse AJAX

Prérequis :

Voici ce que l'on va obtenir à l'issu de cet atelier : une base de données pour gérer nos albums de musique.

Remarque sur... Les points importants dans une base de données

N'oubliez pas : tout au long du développement de la base, une des principales préoccupations doit être d'offrir un maximum d'ergonomie à l'utilisateur final de la base.

Vous devrez donc présentez vos formulaires de la façon la plus agréable possible, permettre la navigation dans la base grâce à des boutons appropriés, offrir des outils de recherche qui facilite l'exploration des tables.

Présentation du MCD
et création des tables

La base sur laquelle nous allons travailler servira à gérer une liste d'album musicaux. Voici, ci-contre, le MCD d'où vont être issues nos tables.

Voici les tables correspondantes, avec les types de données et l'explication pour chacun des champs :

Artiste 
NumANuméro Auto Clé primaire : identifie de façon stable et unique un artiste
NomATexte (taille du champ : 50) Nom (et éventuellement prénom) de l'artiste (exemple : Carlos Santana)
CommentaireMémo Un commentaire sur l'artiste, sa biographie, le dernier article de Paris Match, etc.

Participer 
Part_NumANumérique (entier long) Clé étrangère correspondant à l'artiste
Part_NumCDNumérique (entier long) Clé étrangère correspondant au disque
InvitéBooléen Faux : l'artiste est artiste principal de ce disque (exemple : Santana sur Supernatural).
Vrai : l'artiste est invité sur ce disque (exemple : Eagle-Eye Cherry sur Supernatural)

Disque 
NumCDNuméro Auto Clé primaire : identifie de façon stable et unique un disque
TitreTexte (taille du champ : 80) Titre du disque (exemple : Supernatural)
AnnéePNumériques (entier) Année de production figurant sur la pochette du disque (exemple : 1999)
LabelTexte (taille du champ : 30) Maison d'édition (exemple : Universal)
SupportNumérique (octet) Support de l'album : CD Audio, MP3, MiniDisc, DVD Audio, etc...

 
A faire
 
GénéralDétail

Lancer Microsoft Access, créez une nouvellebase dans votre répertoire de travail.


Créez les tables correspondant à votre base de données. Pour chaque table, n'oubliez pas de préciser quelle est la clé primaire.
  • Onglet Tables, bouton Nouveau, mode création.
  • Saisir les colonnes Nom du champs et Type de données.
  • Sélectionner la ligne correspondant à la clé primaire et choisir la commande Edition, Clé primaire.
  • Enregistrer la table en précisant son nom, répétez l'opération pour les deux autres tables.
Créez les relations entre les tables, grâce au module Relations.
        
  • Allez dans le module Relations
  • Insérez toutes les tables.
  • Reliez chaque clé étrangère avec la clé primaire correspondante.
  • Pour chaque relation, activer les options Appliquer l'intégrité référentielle, Mettre à jour en cascade les champs correspondant, Effacer en cascade les champs correspondant.
Vous avez maintenant créé les tables, mais elles sont vides. Vous les remplirez progressivement avec les disques de votre collection. Commencez par saisir trois disques dans les tables, avec les artistes correspondant.

Vous remarquez que dans la table Participer, les informations ne sont pas compréhensibles car on affiche les numéros automatiques. On va corriger ça en faisant afficher le titre du disque et le nom de l'artiste (ce qui ne change rien du point de vu du stockage : on ne va influencer que l'affichage !).

 
A faire
 
GénéralDétail

Améliorer la lisibilité de la table Participer en affichant le nom de l'artiste au lieu de sa clé primaire.

  • Sélectionner la table Participer et cliquez sur Modifier,
  • Sélectionner le champs Part_NumA,
  • Cliquer, en bas, sur l'onglet "liste de choix",
  • Modifier :
    • Afficher le contrôle : zone de liste modifiable
    • Contenu : Artiste
    • Nbre Colonnes : 2
    • Largeur de colonnes : 0cm (=invisible) ; 4cm
  • Maintenant, ouvrez la table, et constatez l'amélioration pour le choix de l'artiste.
Faire la même chose pour le titre du disque, dans la table Participer.  

Cette façon d'afficher les informations est bien plus pratique, et cela ne change rien au niveau du stockage car c'est toujours un numéro qui est stocké dans la table. On va faire la même chose pour le support du disque : bien que déclaré en tant qu'entier (0, 1, 2, etc.) on va afficher des informations textuelles (CD, mp3, K7, DVD Audio, SuperCD, etc.)

La différence avec ce qui précède : on ne va pas chercher l'information textuelle dans une table (comme c'était le cas pour le titre du disque ou pour le nom de l'artiste), mais on va au contraire créer une liste figée.

 
A faire
 
GénéralDétail
Améliorer la lisibilité du champs Support de la table Disque, en affichant des informations textuelles.
  • Sélectionner la table Disque et cliquez sur Modifier,
  • Sélectionner le champ Support,
  • Cliquer, en bas, sur l'onglet liste de choix,
  • Modifier :
    • Afficher le contrôle : Zone de liste modifiable
    • Origine source : Liste de valeurs
    • Contenu : 0;"CD"; 1;"CD Extra"; 2;"MiniDisc"; 3;"CD mp3"; 4; "HD mp3"; 5; "DVD Vidéo"; 6;"DVD Audio"; 7;"SuperCD"
    • Nbre Colonnes : 2
    • Largeur de colonnes : 0cm (=invisible) ; 4cm
  • Maintenant, ouvrez la table, et constatez l'amélioration pour le choix du support.

Remarque sur... Dissocier le stockage et l'affichage

Le stockage et l'affichage des données répondent à des contraintes différentes :

On peut dissocier cela en stockant les données d'une façon et en les affichant d'une autre façon. C'est le cas ici de la table participe et du support des disques, qui respectent toutes les contraintes du stockage et de l'affichage.

Création d'un formulaire pour les disques
et un formulaire pour les artistes

La table n'est pas une interface très pratique pour l'utilisateur final de la base de données. Dans Access, toute les saisies, les consultation, etc. se font au travers des formulaires. Les formulaires seront donc l'interface exclusive entre l'utilisateur et la base de données. L'utilisateur final n'aura à manipuler ni les tables, ni les requêtes SQL, ni les modules.

 
A faire
 
GénéralDétail

En utilisant l'assistant, créez un formulaire basé sur la table des disques.

  • Dans la fenêtre de base de données, cliquer sur l'onglet formulaires.
  • Cliquez sur Nouveau.
  • Dans la fenêtre Nouveau formulaire, choisissez Assistant formulaire, basé sur la table Disque, puis validez.
  • Dans la fenêtre Assistant formulaire, déplacez tous les champs le la liste Champs disponibles vers la liste Champs séléctionnés.
  • Validez toutes les fenêtres suivantes jusqu'à ce que votre formulaire apparaisse. Vous voyez alors un disque, vous pourriez le modifier, ou en saisir de nouveaux.
  • Fermez ce formulaire et supprimez-le de la base (on va le refaire juste après, mais en mieux : on va ajouter la liste des artistes). Ne me demandez "faut vraiment le supprimer, m'sieur ?" : faites-le ;-)
Il est possible d'afficher, dans le formulaire, la liste des artistes ayant participé au disque affiché. Cela se fait grâce aux sous-formulaires, tout aussi faciles à créer que ce qu'on vient de faire.

En utilisant l'assistant, créez le même formulaire qu'avant, auquel on ajoute le sous-formulaire des artistes.

  • Cliquez sur Nouveau.
  • Dans la fenêtre Nouveau formulaire, choisissez Assistant formulaire, basé sur la table Disque, puis validez.
  • Dans la fenêtre Assistant formulaire, déplacez tous les champs le la liste Champs disponibles vers la liste Champs séléctionnés.
  • Dans la même fenêtre, choisissez dans la zone de liste modifiable Tables/requêtes:, la table Participer.
  • Déplacez les champs Part_NumA et Part_Invité vers la liste Champs séléctionnés.
  • Validez toutes les fenêtres suivantes jusqu'à ce que votre formulaire apparaisse. Vous voyez alors un disque, avec les artistes correspondant.
  • Essayez de rajouter, puis de supprimer un nouvel artiste pour ce disque (dans la liste des artistes existant). Vous constatez que c'est assez pratique.
De la même façon, créez un formulaire basé sur la table des artistes, contenant un sous-formulaire qui contient les disques auquel l'artiste affiché dans le formulaire a participé.

Améliorer la présentation des formulaires,
pour assurer un maximum d'ergonomie

Nous allons maintenant améliorer la présentation des formulaires, qui comportent pleins d'éléments inutiles ou non ergonomiques : remplacement des boutons de navigation par des boutons de commande, suppression des sélecteurs, ascenseurs, clés primaires, etc. Pour accéder aux propriété du formulaire, faites un clic droit sur le carré représenté ci-contre. Ce carré gris, qui se trouve à gauche de la règle, représente le formulaire lui-même.

 
A faire
 
GénéralDétail

Passez en mode édition du formulaire Disque.

  • Dans la fenêtre de base de données, cliquez sur le formulaire Disque, puis sur le bouton Modifier.
Supprimer la clé primaire (NumCD) qui n'a absolument aucun intérêt pour l'utilisateur : ce champs n'est utilisé que pour les traitement internes (les jointures en général).
  • Sélectionnez l'étiquette et la zone de texte correspondant à NumCD, qui appuyez sur la touche Supprimer.

Remplacez les boutons de déplacement :

par des boutons de commande (Premier disque, Disque précédent, Disque suivant, Nouveau disque, Supprimer ce disque, Fermer).
Important : mettez une légende explicite sur vos boutons (par exemple : Disque suivant au lieu de Enregistrement suivant). Donnez également un nom explicite à vos contrôles (par exemple : CmdSuivant au lieu de Commande14).

  • Dans la fenêtre de propriété du formulaire, choisissez l'onglet Format.
  • Remplacer l'option Boutons de déplacement : non.
  • Insérez des boutons de commande à partir de la barre d'outil.
  • Pour chaque bouton, utilisez l'assistant pour définir son rôle : Premier enregistrement, Enregistrement précédent, Enregistrement suivant, Ajouter un Enregistrement, Supprimer un enregistrement.
Grâce aux propriétés sur le formulaire : supprimer le bouton pour maximiser la fenêtre, empêcher l'utilisateur de la redimensionner, enlevez les sélecteurs et les diviseurs d'enregistrement, supprimez les barres de défilement.
  • Les propriétés concernées sont : Bouton MinMax, Style bordure, Afficher Sélecteur, Diviseur d'enregistrements, Barre défilement.
Faites la même chose pour chaque formulaire et sous-formulaire (pour les sous-formulaires, l'important est seulement de supprimer les boutons de déplacement).
Avant :

Après :

Création d'un formulaire d'accueil

 
A faire
 

Créer un formulaire qui sera le menu d'accueil de votre application. Il contiendra éventuellement un logo, ainsi que deux boutons de commandes (Liste des disques, Liste des artistes) qui, lorsqu'on clique dessus, ouvriront les autres formulaires déjà créés (utilisez pour ça les assistant des boutons de commande).

Faites en sorte que lorsqu'on lance la base de données, ce formulaire apparaisse automatiquement. Ceci ce fait grâce à la commande Démarrage du menu Outil.

Création d'une liste déroulante
pour faciliter le choix des disques

L'objectif est de rajouter une liste dans le formulaire des disques. Cette liste contient tous les disques. Lorsqu'on clique sur un disque dans cette liste, les renseignements sur ce disque vont s'afficher dans notre formulaire (grâce à <<1>>).

 
A faire
 
GénéralDétail

Dans votre formulaire des disques, laissez la place à droite pour insérer une zone de liste.

  • Ouvrez le formulaire en mode modification.
  • Agrandissez le formulaire en repoussant la limite à droite (grâce à la souris).
Insérez la zone de liste et paramétrez-la grâce à l'assistant, afin qu'elle affiche la liste des titres, et qu'elle affiche le disque correspondant lorsqu'on clique dessus.
  • Dans la boite à outil, cliquez sur la zone de liste.
  • Posez votre zone de liste sur le formulaire.
  • <<1>> Dans l'assistant, choisir Rechercher un enregistrement dans mon formulaire basé sur la valeur sélectionnée dans la zone de liste.
  • Dans la fenêtre Assistant zone de liste, déplacez le champs Titre le la liste Champs disponibles vers la liste Champs séléctionnés. Validez tout.
  • Supprimer la zone de texte Titre qui a été créée, sur votre formulaire, un peu à gauche de la liste.
  • Essayez votre formulaire.
Faites en sorte que cette liste soit triée selon l'ordre alphabétique des titres.
  • Afficher les propriétés de la liste, onglet Données, propriété Contenu.
  • Cette propriété contient une requête en SQL. Il suffit d'ajouter la clause ORDER BY appropriée pour effectuer le tri. Faites-le puis essayez le résultat.

Transformer la liste déroulante
en un outil de recherche rapide et efficace

Notre liste affiche tous les disques. C'est bien, mais on aimerai lui faire afficher certains disques qui répondent à un critère de recherche. Plus précisément, on va lui faire afficher les disques dont le titre contient un mot qui sera tapé dans une zone de texte.

 
A faire
 
GénéralDétail

Insérer une zone de texte nommée TxtRecherche au-dessus de la zone de liste.

  • Insérez la zone de texte.
  • Supprimer le champs Texte## apparu un peu à gauche de votre zone de texte.
  • Dans les propriétés de la zone de texte, onglet Autre, changez le nom par TxtRecherche.

Dans le module de requête, tapez la requête qui donne la clé primaire et le titre des disques qui correspondent à notre recherche.

Sauvez la requête sous le nom ChercheDisque.

  • Dans une requête SQL, pour faire référence au contenu d'un champs d'un formulaire, on utilise forms!Disque.TxtRecherche, où Disque est le nom du formulaire et TxtRecherche est le nom du contrôle.
  • Attention ! Pour essayer cette requête dans le module de requête, votre formulaire doit être ouvert, vous devez avoir entré une valeur dans le champs TxtRecherche et avoir appuyé sur la touche de tabulation (le fait de tabuler valide son nouveau contenu).
  • Sauvez la requête sous le nom ChercheDisque.
Associer la requête à la liste déroulante (propriété Contenu, Rowsource en anglais).
  • Ouvrez le formulaire en mode création et affichez les propriétés de la liste.
  • Dans la propriété Contenu (onglet Données), à la place de la requête SQL présente, choisissez la requête ChercheDisque.
Sur l'événement Perte Focus de la zone de texte, faire une macro qui actualise la liste des résultats.
  • Dans les propriétés de la zone de texte, choisir l'onglet Evénement.
  • Choisissez l'événement Sur Perte Focus et cliquez sur les trois points à droite.
  • Choisissez Générateur de macro.
  • Choisissez un nom quelconque pour la macro, puis faite l'action Actualiser appliquée au contrôle Liste26 (à condition que Liste26 soit le nom de votre zone de liste).
  • Essayez votre formulaire.

Vous venez de faire un outil de recherche, outil très puissant et indispensable dans les bases de données. Effectivement, lorsqu'on cherche un disque dans une grande base, au lieu de chercher en faisant défiler plusieurs milliers d'enregistrements, on va chercher en utilisant un outil de recherche similaire.

 
A faire
 

Réalisez un outil de recherche similaire dans le formulaire des artistes.

Améliorez l'outil de recherche dans le formulaire des disques pour qu'il ne recherche pas seulement sur le titre, mais aussi sur le label, puis sur le nom des artistes.
Améliorez l'outil de recherche de façon à ce que la liste affiche (par exemple) l'information suivante : Love over Gold (1983), c'est à dire le titre et l'année, le tout trié par année. Vous pouvez également essayer de faire affiche le nom de l'artiste.

Création d'états (pour l'impression) :
fiche détaillée d'un disque, liste des disques

Les états servent à mettre en page les informations destinées à l'impression. Les états, contrairement aux formulaires, ne sont pas du tout interactifs.
Nous allons faire, comme c'est le cas généralement, deux états par entité (entité disque et entité artiste) :

 
A faire
 
GénéralDétail

Créer un état Liste générale des disques pour la liste simplifiée des disques. Afficher uniquement le titre, ainsi que le nom des artistes ayant écrit ce disque.

  • Dans la fenêtre de base de données, choisissez l'onglet état.
  • Cliquer sur Nouveau.
  • Choisissez Assistant Etat basé sur la table Disque.
  • Dans la fenêtre suivante, faite glisser dans la liste des champs sélectionnés le champ Titre, ainsi que le champs Part_NumA de la table Participer.
  • Validez tout, vérifiez la présentation de votre état, arrangez-la ou relancez l'assistant le cas échéant (l'assistant propose plusieurs dispositions différentes).
  • Fermez votre état.
  • Renommez-le Liste générale des Disques.

Créez un état Fiche détaillée d'un disque. Vous afficherez dans cet état tous les champs du disque, ainsi que la liste des artiste. Vous rajouterez une condition pour n'imprimer que le disque ouvert dans le formulaire Disque.

Remarque : il n'y a pour l'instant pas beaucoup de différence entre la fiche détaillée d'un disque et la liste générale, mais on y remédiera en mettant bientôt la photo du disque dans sa fiche détaillée.

  • Dans la fenêtre de base de données, choisissez l'onglet état.
  • Cliquer sur Nouveau.
  • Choisissez Assistant Etat basé sur la table Disque.
  • Dans la fenêtre suivante, faite glisser dans la liste des champs sélectionnés, tous les champs de la table Disque (sauf la clé primaire), ainsi que le champ NumA de la table Participer.
  • Validez jusqu'à la question Comment souhaitez-vous présenter votre état ? Choisissez Contour1 (les premiers choix ne permettent pas de visualisez tous les champs).
  • Terminez, vérifiez le résultat.
  • Passez en mode création et affichez les propriétés de l'état.
  • Dans l'onglet Données, choisissez la propriété Filtre.
  • Mettez comme valeur pour cette propriété :
        NumCD = forms.Disque.numCD
  • Dans la proriété Filtre actif, mettez la valeur Oui.
  • Essayez votre état (attention, le formulaire Disque doit être ouvert, l'état doit alors afficher le même disque que celui ouvert dans le formulaire).
  • Fermez votre état puis renommez-le Fiche détaillée d'un disque.

Remarque : un bug d'Access fait qu'il faut sauvegarder juste après avoir modifié les propriétés concernant le filtre, si l'on souhaite que la modification soit effectivement sauvegardée.

L'interface d'Access devant être invisible pour les utilisateurs finaux, nous allons créer des liens depuis le formulaire Disque vers ces états. Pour ça, on va utiliser des boutons de commande.

 
A faire
 
GénéralDétail

Ajouter, dans le formulaire Disque, un bouton de commande qui ouvre l'état Liste générale des disques (en aperçu seulement, et non pas en impression).

  • Ouvrez le formulaire Disque en création.
  • Ajoutez un bouton de commande.
  • Dans l'assistant, choisissez Opérations sur état, Aperçu d'un état.
  • Dans la fenêtre suivante, choisissez l'état Liste générale des disques.
  • Dans la fenêtre suivante, tapez le texte Imprimer la liste des disques.
  • Terminez, essayez votre bouton.

Ajouter, dans le formulaire Disque, un bouton de commande qui ouvre l'état Fiche détaillée d'un disque (en aperçu seulement, et non pas en impression).

  • Idem, le texte sur le bouton est Imprimer la fiche de ce disque.

Une autre fonctionnalité intéressante serait d'imprimer le résultat de la recherche (cf. outil de recherche qu'on a fait dans l'étape 6). C'est ce que l'on va faire maintenant.

 
A faire
 

Faite un état simplifié des disques, qui a pour filtre :

Titre Like '*' & forms.disque.TxtRecherche & '*'

N'oubliez pas d'activer le filtre et de sauver aussitôt. Placez un bouton de commande dans votre formulaire Disque, qui s'intitule Imprimer le résultat de la recherche. Faites le lien entre ce bouton et ce nouvel état.

Si vous voulez être certains de bien maîtriser la façon de construire et paramétrer les états, alors faites des états similaires qui concernent les artistes, et qui seront appelés à partir du formulaire des artistes.

Premiers pas en Visual Basic : insertion d'images
pour visualiser la pochette des disques

Nous allons ajouter les images des disques !!! Afin d'automatiser au maximum, nous n'allons pas stocker l'image dans la table comme le permet Access, car c'est très contraignant et difficile à manipuler.

Le fonctionnement va être le suivant : Access va chercher dans un répertoire précis, s'il existe une image qui porte le même nom que le disque courant (quelque soit l'extension). Si c'est le cas, il va l'afficher. Sinon il va afficher une image par défaut.

Allez chercher les pochettes de quelques-uns de vos disques, et copiez-les dans Z:\pochettes par exemple.

Important : les images doivent porter, comme nom de fichier, le titre du disque tel qu'il est écrit dans la base. Par exemple, pour l'album First rays of the new rising sun, le fichier doit s'appeler First rays of the new rising sun.JPG ou First rays of the new rising sun.GIF.

Une image porte le nom Vide.jpg. C'est l'image par défaut, c'est à dire celle qu'on affichera lorsque l'image d'un disque ne sera pas disponible.

 
A faire
 
GénéralDétail

Ajoutez dans le formulaire Disque un champs image, qui contient l'image Vide.jpg. Ajustez la taille de l'image.

  • Ouvrez le formulaire en mode création.
  • Dans la barre d'outils, cliquez sur Image. Posez l'image sur votre formulaire.
  • Dans le sélecteur de fichier qui apparaît, choisissez l'image \\1lm38038\Commun\disques\Vide.jpg.
  • Réglez les propriétés de l'image :
    • Type Image : Attachée,
    • Mode affichage : Zoom,
    • largeur et hauteur identiques.

Dans l'événement Activation du formulaire, tapez le code Visual Basic qui permet de changer d'image selon le disque affiché dans le formulaire.

  • Ouvrir les propriétés du formulaire.
  • Choisissez l'onglet Evénements.
  • Choisir l'événement Sur Activation (c'est le premier dans la liste), cliquez sur les à droite.
  • Choisissez Générateur de Code.
  • Tapez le code ci-dessous.
  • Essayez votre formulaire.

Dim NomImage As String
NomImage = Dir("\\1lm38038\Commun\Disques\" & Titre & ".*")

La fonction Dir renvoie le premier nom de fichier qui correspond au masque donné en paramètre. Si elle ne trouve aucun fichier qui correspond, elle renvoie la chaîne vide "". Par exemple : Dir("\\1lm38038\Commun\Disques\Supernatural.*") peut renvoyer "Supernatural.GIF" ou "".

If NomImage = "" Then NomImage = "vide.jpg"

Si on n'a pas trouvé de fichier qui correspond au disque courant, alors NomImage devient l'image par défaut, l'image vide.

Image36.Picture = "\\1lm38038\Commun\Disques\" & NomImage

La propriété Picture de notre contrôle Image précise quelle est l'image à afficher dans le formulaire. Il suffit de lui attribuer le nom de l'image que l'on a trouvé juste avant, pour que celle-ci soit affichée.

Rajouter des compteurs
et améliorer l'ergonomie des formulaires

On va tout d'abord afficher le numéro du disque courant et le nombre total de disques dans la base.

 
A faire
 
Placez une étiquette sur votre formulaire des disques, que vous nommez LabelComptage.

Dans l'événement "sur activation" du formulaire, rajouter la ligne suivante :

LabelComptage.Caption = "Disque " & Me.CurrentRecord & " sur " & RecordsetClone.RecordCount

Explications :

  • Me.CurrentRecord représente le numéro de l'enregistrement courant.
  • RecordsetClone.RecordCount représente le nombre total d'enregistrements dans le formulaire.
Essayez votre formulaire.

On va maintenant afficher le nombre de disques renvoyés par l'outil de recherche.

 
A faire
 
Tapez la requête qui donne le nombre de disques renvoyés par la requête RechercheDisques. Nommez-là Count_ChercheDisque.
Dans votre formulaire, faites une zone de liste basée sur cette requête (une hauteur d'une ligne suffit)
Dans la macro qui s'exécute lorsqu'on lance la recherche, et dont le rôle était d'actualiser la liste des réponses, vous devez rajouter l'actualisation de cette nouvelle zone de liste.
Testez. Améliorez ensuite la présentation.

On veut supprimer les boutons inutiles et améliorer l'outil de recherche.

 
A faire
 
Supprimer les boutons premier disque, disque précédent, disque suivant qui ne servent plus à rien. En effet, lorsqu'on veut afficher un disque, il suffit de le sélectionner dans la liste des réponses.
Faites un bouton Afficher tous les disques qui annule la recherche et réaffiche tous les disques. Pour cela, il faut effacer la zone de texte, puis actualiser la liste des réponses. Vous pouvez le faire par macro ou par code Visual Basic.

Améliorer la gestion des artistes
grâce à de la programmation en Visual Basic

L'objectif est de remplacer le sous-formulaire Artiste, dans le formulaire Disque, par une zone de liste (bien plus esthétique, toujours dans un soucis d'améliorer l'ergonomie pour l'utilisateur).

 
A faire
 
GénéralDétail

Faites la requête ListeArtistes qui renvoie le numéro et le nom des artistes dont le disque est affiché dans le formulaire des disques.

 

Remplacer le sous-formulaire des artistes par une zone de liste LstArtistes, dont le contenu est basé sur la requête précédente.

  • Ouvrir le formulaire des disques en mode création.
  • Supprimer le sous-formulaire des artistes.
  • Insérez une zone de liste, que vous nommez LstArtistes.
  • Annuler l'assistant (Access plante systématiquement si on essaie de faire ça à l'assistant).
  • Accédez aux propriétés de la liste.
  • Dans la propriété Contenu de l'onglet Données, choisissez la requête précédente (ListeArtistes).
  • Dans la propriété Nbre colonnes de l'onglet Format, mettez 2.
  • Dans la propriété Largeur Colonnes, mettez 0cm;3cm
Faire en sorte que l'affichage soit rafraîchi lorsqu'on change de disque dans le formulaire.
  • Allez sur l'événement Sur Activation du formulaire.
  • Dans le code Visual Basic, rajoutez Me.Refresh
  • Testez votre formulaire.

On veut maintenant rajouter la possibilité d'ajouter ou de supprimer un artiste pour un disque. Lorsqu'on cliquera sur le bouton Supprimer, cela va supprimer l'artiste sélectionné dans la liste (remarque : ça ne le supprime pas de la base, ça le supprime juste de la liste des artistes pour ce disque).

 
A faire
 
GénéralDétail

Rajoutez un bouton de commande intitulé Supprimer cet artiste dans votre formulaire. Annulez l'assistant.

 

Sur ce bouton, ajoutez le code permettant de supprimer l'artiste.

  • Ouvrez le menu contextuel grâce à un clic droit sur le bouton.
  • Choisissez la commande Créer code événement.
  • Choisissez Générateur de Code.
  • Tapez le code suivant dans la fonction, en supposant que LstArtistes est le nom de votre zone de liste.

DoCmd.RunSQL "delete from ecrit where numA= forms.disque.lstartistes and NumCD=forms.Disque.NumCD"
Me.Refresh

Ouvrez le formulaire pour essayez votre bouton de commande. Dim db As dao.Database, rs As dao.Recordset, NumA
Set db = CurrentDb
Set rs = db.OpenRecordset("Artiste", dbOpenDynaset)
rs.FindFirst "Nom = '" & Forms.Disque.TxtArtiste & "'"
If rs.NoMatch Then
  rs.AddNew
  rs("Nom") = TxtArtiste
  NumA = rs("NumA")
  rs.Update
Else
  NumA = rs("NumA")
End If
DoCmd.RunSQL "insert into Ecrit values (" & NumA & "," & Forms.Disque.NumCD & ")"
 rs.Close
 db.Close
Me.Refresh
Ajoutez une zone de texte TxtArtiste permettant de saisir un nouvel artiste pour ce disque.
Ajoutez un bouton Ajouter cet artiste.
Sur ce bouton, tapez le code suivant.

Explication : L'algorithme est en fait le suivant :

Ouvrir la base
Ouvrir la table Artiste dans le recordset RS.
Chercher dans RS l'artiste qui nous intéresse.
S'il n'existe pas
  On rajoute un nouvel enregistrement dans la table
  Cet enregistrement correspond au nouvel artiste.
  NumA = clé primaire de ce nouvel artiste.
Sinon, s'il existe déjà à NumA = clé primaire de ce nouvel artiste.
Ajouter dans la table écrit une correspondance entre cet artiste et le disque courant.
Fermer la base et le formulaire.
Rafraîchir l'affichage du formulaire.

 
A faire
 

Tester votre formulaire, en essayant de supprimer des artistes puis de les recréer.