Comment afficher des images à partir d’un dossier dans un formulaire, un état ou une page d’accès aux données
Numéro de la base de connaissances d’origine : 285820
Remarque
Nécessite des compétences d’experts en codage, en interopérabilité et en multi-utilisateur. Cet article s’applique à une base de données Microsoft Access (.mdb/.accdb) et à un projet Microsoft Access (.adp).
Résumé
Parfois, il n’est pas pratique de stocker des images dans une table Microsoft Access. Si vous avez de nombreuses images, ou si chacun de vos fichiers image est volumineux, la taille du fichier de base de données Microsoft Access peut rapidement augmenter.
Cet article présente une fonction personnalisée que vous pouvez utiliser pour :
- Stockez les chemins d’accès aux fichiers et les noms des images dans une table.
- Afficher des images à l’aide d’un contrôle image.
- Masquez le contrôle image si aucune image n’est disponible.
- Fournissez des commentaires sur le status d’affichage de l’image.
Cet article contient également un exemple de script Visual Basic que vous pouvez utiliser pour afficher les images dans une page d’accès aux données.
Remarque
Bien que cet exemple utilise des images bitmap (.bmp), vous pouvez également utiliser d’autres types d’images, tels que .jpg, .pcx et .gif.
Microsoft fournit des exemples de programmation à titre d’illustration uniquement, sans garantie expresse ou implicite. Cela inclut, sans y être limité, les garanties implicites de commercialisation et d’adaptation à un but en particulier. Cet article considère que vous connaissez le langage de programmation présenté et les outils utilisés pour créer et déboguer des procédures. Les techniciens du Support technique Microsoft peuvent vous expliquer les fonctionnalités d’une procédure particulière, mais ils ne peuvent pas modifier les exemples en vue de vous fournir des fonctionnalités supplémentaires ou de créer des procédures répondant à vos besoins spécifiques.
Création de la table pour stocker les données de fichier et de chemin d’accès
Ouvrez l’exemple de base de données, Northwind.mdb ou l’exemple de projet NorthwindCS.adp.
Créez le tableau suivant dans Northwind.mdb ou dans NorthwindCS.adp.
Dans Northwind.mdb :
Table: tblImage ---------------------------- Field Name: ImageID Data Type: AutoNumber Indexed: Yes (No Duplicates) Field Name: txtImageName Data Type: Text Table Properties: tblImage -------------------------- PrimaryKey: ImageID
Dans NorthwindCS.adp :
Table: tblImage ----------------------- Column Name: ImageID Datatype: Int Allow Nulls: Unchecked Identity: Yes Column Name: txtImageName Datatype: varchar Table Properties: ImageTable ------------------------------- Primary Key Constraint: ImageID
Ouvrez la table tblImage en mode Feuille de données, puis ajoutez le chemin et le nom d’un fichier bitmap à chaque enregistrement. Le tableau d’exemples suivant montre à quoi peuvent ressembler les enregistrements :
Type Exemple Absolu (local) C:\Windows\Zapotec.bmp Absolu (chemin UNC) \\Servername\sharename\Zapotec.bmp Relative Zapotec.bmp
Création de la fonction personnalisée
Créez un module, puis collez ou tapez le code suivant :
Option Compare Database Option Explicit Public Function DisplayImage(ctlImageControl As Control, strImagePath As Variant) As String On Error GoTo Err_DisplayImage Dim strResult As String Dim strDatabasePath As String Dim intSlashLocation As Integer With ctlImageControl If IsNull(strImagePath) Then .Visible = False strResult = "No image name specified." Else If InStr(1, strImagePath, "\") = 0 Then ' Path is relative strDatabasePath = CurrentProject.FullName intSlashLocation = InStrRev(strDatabasePath, "\", Len(strDatabasePath)) strDatabasePath = Left(strDatabasePath, intSlashLocation) strImagePath = strDatabasePath & strImagePath End If .Visible = True .Picture = strImagePath strResult = "Image found and displayed." End If End With Exit_DisplayImage: DisplayImage = strResult Exit Function Err_DisplayImage: Select Case Err.Number Case 2220 ' Can't find the picture. ctlImageControl.Visible = False strResult = "Can't find image in the specified name." Resume Exit_DisplayImage: Case Else ' Some other error. MsgBox Err.Number & " " & Err.Description strResult = "An error occurred displaying image." Resume Exit_DisplayImage: End Select End Function
Enregistrez le module en tant que Module1.
Utilisation de la fonction personnalisée dans un formulaire
Créez le formulaire suivant basé sur la table tblImage.
Form: frmImage ---------------------- Caption: Image Form RecordSource: tblImage Image Control --------------------------------- Name: ImageFrame Picture: "C:\Windows\Zapotec.bmp" Text box ---------------------- Name: txtImageID ControlSource: ImageID Text box --------------------------- Name: txtImageName ControlSource: txtImageName Text box --------------------------- Name: txtImageNote ControlSource: <Blank>
Remarque
Si vous ne souhaitez pas que le chemin d’accès apparaisse dans le formulaire, vous pouvez définir la
Visible
propriété du contrôle surtxtImageName
False.Dans le menu Affichage , cliquez sur Code, puis collez ou tapez le code suivant :
Option Compare Database Option Explicit Private Sub Form_AfterUpdate() CallDisplayImage End Sub Private Sub Form_Current() CallDisplayImage End Sub Private Sub txtImageName_AfterUpdate() CallDisplayImage End Sub Private Sub CallDisplayImage() Me!txtImageNote = DisplayImage(Me!ImageFrame, Me!txtImageName) End Sub
Ouvrez le formulaire frmImage en mode Formulaire. Notez que le formulaire affiche la bitmap correspondante pour chaque enregistrement. Si le
txtImageName
champ est vide ou si l’image est introuvable, vous recevez les messages appropriés au lieu du cadre de l’image.
Utilisation de la fonction personnalisée dans un rapport
Créez le rapport suivant basé sur la table ImageTable.
Report: rptImage ---------------------- Caption: Image Report RecordSource: tblImage Image Control --------------------------------- Name: ImageFrame Picture: "C:\Windows\Zapotec.bmp" Text box ---------------------- Name: txtImageID ControlSource: ImageID Text box --------------------------- Name: txtImageName ControlSource: txtImageName Text box --------------------------- Name: txtImageNote ControlSource: <Blank>
Remarque
Si vous ne souhaitez pas que le chemin d’accès apparaisse dans le rapport, vous pouvez définir la
Visible
propriété du contrôle surtxtImageName
False.Dans le menu Affichage , cliquez sur Code, puis collez ou tapez le code suivant :
Option Compare Database Option Explicit Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer) Me!txtImageNote = DisplayImage(Me!ImageFrame, Me!txtImageName) End Sub
Ouvrez le rapport rptImage dans l’aperçu avant impression. Notez que le rapport affiche la bitmap correspondante pour chaque enregistrement. Si le
txtImageName
champ est vide ou si l’image est introuvable, vous recevez les messages appropriés au lieu du cadre de l’image.
Duplication de la fonction personnalisée dans une page d’accès aux données
Créez la page d’accès aux données suivante basée sur la table tblImage.
Data Access Page: dapImage ----------------------------- Title: Image Data Access Page Image Control --------------------------------- ID: ImageFrame Text box ---------------------- ID: txtImageID ControlSource: ImageID Text box --------------------------- ID: txtImageName ControlSource: txtImageName
Remarque
Si vous ne souhaitez pas que le chemin d’accès apparaisse dans la page, vous pouvez définir la
Visibility
propriété du contrôle surtxtImageName
Masqué.Dans le menu Outils, pointez sur Macros, puis cliquez sur Microsoft Script Editor.
Ajoutez le script suivant à l’événement Current de MSODSC dans la partie balise HEAD du document HTML.
Remarque
Vous devez transmettre un paramètre pour que l’événement soit déclenché.
<SCRIPT language=vbscript event=Current(oEventInfo) for=MSODSC> <!-- ImageFrame.src=txtImageName.value --> </SCRIPT>
Ouvrez la page dapImage en mode Page. Notez que la page affiche la bitmap correspondante pour chaque enregistrement. Si le champ txtImageName est vide, une icône de contrôle s’affiche. Si l’image est introuvable, une icône X s’affiche dans le contrôle image.
Utiliser un chemin d’accès http:// dans un formulaire
Pour utiliser un chemin d’accès http:// dans un formulaire, utilisez le contrôle de navigateur Web (shdocvw.dll) comme suit :
Ajoutez un contrôle Microsoft Web Browser au formulaire et nommez-le WebBrowser.
Ajoutez le code suivant à un module :
Public Function DisplayImageWeb(ctlBrowserControl As Control, _ strImagePath As Variant) On Error GoTo Err_DisplayImage Dim strDatabasePath As String Dim intSlashLocation As Integer With ctlBrowserControl If IsNull(strImagePath) Then ElseIf Left(strImagePath, 4) = "http" Then .Navigate (strImagePath) Else If InStr(1, strImagePath, "\") = 0 Then ' Path is relative strDatabasePath = CurrentProject.FullName intSlashLocation = InStrRev(strDatabasePath, "\", Len(strDatabasePath)) strDatabasePath = Left(strDatabasePath, intSlashLocation) strImagePath = strDatabasePath & strImagePath End If .Navigate (strImagePath) End If End With Exit_DisplayImage: Exit Function Err_DisplayImage: Select Case Err.Number Case Else MsgBox Err.Number & " " & Err.Description Resume Exit_DisplayImage: End Select End Function
Ajoutez le code suivant derrière le formulaire :
Option Compare Database Option Explicit Private Sub Form_AfterUpdate() CallDisplayImage End Sub Private Sub Form_Current() CallDisplayImage End Sub Private Sub txtImageName_AfterUpdate() CallDisplayImage End Sub Private Sub CallDisplayImage() DisplayImageWeb Me.WebBrowser9, Me.txtImageName End Sub
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : tout au long de 2024, nous allons éliminer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d'informations, consultez :Envoyer et afficher des commentaires pour