Pour utiliser ce qui suit, vous avez besoin de savoir définir un événement dans un formulaire, compiler du code, et exécuter du code.
On pourrait penser que le type de champ "Liaison OLE" ou "Objet OLE" est approprié pour gérer des images dans Access, puisqu'il agit comme "container générique" pour le texte, l'image, le son... Le problème est que le stockage d'images dans une base de données va considérablement augmenter la taille de la base.
L'idée est donc de placer les images dans un dossier spécifique du disque dur, et de faire référence à ce dossier depuis Access.
La table d'exemple est composée de 3 champs :
Nom du champ | Type de données | Description |
Id Image | NuméroAuto | Numéro de l'image attribué automatiquement par Access. |
Nom Image | Texte, 30 caractères | Nom de l'image en clair. |
Chemin | Texte, 255 caractères | Le nom du fichier image (sans le chemin
d'accès complet). Par exemple : logo.gif |
Le formulaire reprend les 3 champs de la table, ainsi que 2 champs supplémentaires :
Nom du champ | Type d'objet | Description |
txtRepBase | Zone de texte | Chemin d'accès au répertoire de base. |
imgApercu | Image | Aperçu de l'image. |
Quelques remarques :
Comme aucune image n'est stockée dans la table, il faut un peu de code VB pour lire l'image du disque et la placer dans le champ imgApercu. Le meilleur endroit pour placer ce code est l'événement "Après Màj" du champ Chemin. De cette façon, à chaque fois qu'on modifie le nom du fichier image, l'image est (ré)affichée.
Private Sub Chemin_AfterUpdate() Dim strChemin As String On Error Resume Next If IsNull(Me!Chemin) Then Me!imgApercu.Picture = "" Else ' Chemin d'accès à l'image = Répertoire de base + Nom de l'image strChemin = Me!txtRepBase & "\" & Me!Chemin ' Charger l'image Me!imgApercu.Picture = strChemin End If End Sub
Ceci fonctionne bien si l'on change le nom de l'image. Mais il faut aussi
gérer le fait de se déplacer d'une image à une autre (d'un enregistrement de
table à un autre), sinon l'image affichée sera toujours la même.
Pour ceci, il faut recopier le code VB dans l'événement "Sur
activation" du formulaire, ou plus simplement, placer la ligne
suivante dans ce même événement :
Private Sub Form_Current() Chemin_AfterUpdate End Sub
Ainsi, à chaque fois qu'on change d'enregistrement, Access appelle le code VB défini dans le "Après Màj" du champ Chemin. Ce qui produit un affichage de la nouvelle image.