<Retour Grenier>

Début de page Question

Télécharger !Comment gérer une banque d'images dans Access ?
Vous pouvez télécharger une base d'exemple en cliquant sur l'icône ci-contre.

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.

 

Début de page Réponse

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

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 d'exemple

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 :

 

Le code Visual Basic :

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

Et pour finir...

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.