Anzeigen von Bildern aus einem Ordner in einem Formular, einem Bericht oder einer Datenzugriffsseite
Ursprüngliche KB-Nummer: 285820
Hinweis
Erfordert Expertenkenntnisse für Codierung, Interoperabilität und Mehrbenutzerfähigkeiten. Dieser Artikel bezieht sich auf eine Microsoft Access-Datenbank (.mdb/.accdb) und ein Microsoft Access-Projekt (ADP).
Zusammenfassung
Manchmal ist es nicht praktikabel, Bilder in einer Microsoft Access-Tabelle zu speichern. Wenn Sie über viele Bilder verfügen oder jede Ihrer Bilddateien groß ist, kann die Größe der Microsoft Access-Datenbankdatei schnell zunehmen.
In diesem Artikel wird eine benutzerdefinierte Funktion veranschaulicht, die Sie für Folgendes verwenden können:
- Speichern sie Dateipfade und Namen von Bildern in einer Tabelle.
- Anzeigen von Bildern mithilfe eines Bildsteuerelements.
- Blenden Sie das Bildsteuerelement aus, wenn kein Bild verfügbar ist.
- Geben Sie Feedback zur Anzeige status des Bilds.
Dieser Artikel enthält auch ein Visual Basic-Beispielskript, mit dem Sie die Bilder auf einer Datenzugriffsseite anzeigen können.
Hinweis
Obwohl in diesem Beispiel Bitmapbilder (.bmp) verwendet werden, können Sie auch andere Bildtypen wie .jpg, PCX und .gif verwenden.
Die Verwendung der hier aufgeführten Informationen, Makro- oder Programmcodes geschieht auf Ihre eigene Verantwortung. Microsoft stellt Ihnen diese Informationen sowie Makro- und Programmlistings ohne Gewähr auf Richtigkeit, Vollständigkeit und/oder Funktionsfähigkeit sowie ohne Anspruch auf Support zur Verfügung. Die zur Verfügung gestellten Makro- und Programmierungsbeispiele sollen lediglich exemplarisch die Funktionsweise des Beispiels aufzeigen. Die Microsoft Support-Spezialisten können bei der Erläuterung der Funktionalität bestimmter Prozeduren helfen, jedoch werden sie diese Beispiele nicht in Bezug auf eine erweiterte Funktionalität verändern, noch werden sie Prozeduren entwickeln, die auf Ihre besonderen Bedürfnisse zugeschnitten sind.
Erstellen der Tabelle zum Speichern von Datei- und Pfaddaten
Öffnen Sie die Beispieldatenbank, Northwind.mdb oder das Beispielprojekt NorthwindCS.adp.
Erstellen Sie die folgende Tabelle entweder in Northwind.mdb oder in NorthwindCS.adp.
In 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
In 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
Öffnen Sie die Tabelle tblImage in der Datenblattansicht, und fügen Sie dann den Pfad und namen einer Bitmapdatei zu jedem Datensatz hinzu. Die folgende Beispieltabelle zeigt, wie die Datensätze aussehen können:
Typ Beispiel Absolut (lokal) C:\Windows\Zapotec.bmp Absolut (UNC-Pfad) \\Servername\sharename\Zapotec.bmp Relativ Zapotec.bmp
Erstellen der benutzerdefinierten Funktion
Erstellen Sie ein neues Modul, und fügen Sie dann den folgenden Code ein, oder geben Sie ihn ein:
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
Speichern Sie das Modul als Modul1.
Verwenden der benutzerdefinierten Funktion in einem Formular
Erstellen Sie das folgende neue Formular, das auf der Tabelle tblImage basiert.
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>
Hinweis
Wenn der Pfad nicht im Formular angezeigt werden soll, können Sie die
Visible
-Eigenschaft destxtImageName
Steuerelements auf False festlegen.Klicken Sie im Menü Ansicht auf Code, und fügen Sie den folgenden Code ein, oder geben Sie ihn ein:
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
Öffnen Sie das Formular frmImage in der Formularansicht. Beachten Sie, dass das Formular die entsprechende Bitmap für jeden Datensatz anzeigt. Wenn das
txtImageName
Feld leer ist oder das Bild nicht gefunden werden kann, erhalten Sie anstelle des Bildrahmens entsprechende Meldungen.
Verwenden der benutzerdefinierten Funktion in einem Bericht
Erstellen Sie den folgenden neuen Bericht, der auf der Tabelle ImageTable basiert.
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>
Hinweis
Wenn der Pfad nicht im Bericht angezeigt werden soll, können Sie die
Visible
-Eigenschaft destxtImageName
Steuerelements auf False festlegen.Klicken Sie im Menü Ansicht auf Code, und fügen Sie den folgenden Code ein, oder geben Sie ihn ein:
Option Compare Database Option Explicit Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer) Me!txtImageNote = DisplayImage(Me!ImageFrame, Me!txtImageName) End Sub
Öffnen Sie den Bericht rptImage in der Druckvorschau. Beachten Sie, dass der Bericht die entsprechende Bitmap für jeden Datensatz anzeigt. Wenn das
txtImageName
Feld leer ist oder das Bild nicht gefunden werden kann, erhalten Sie anstelle des Bildrahmens entsprechende Meldungen.
Duplizieren der benutzerdefinierten Funktion auf einer Datenzugriffsseite
Erstellen Sie die folgende neue Datenzugriffsseite, die auf der Tabelle tblImage basiert.
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
Hinweis
Wenn der Pfad nicht auf der Seite angezeigt werden soll, können Sie die
Visibility
-Eigenschaft destxtImageName
Steuerelements auf Ausgeblendet festlegen.Zeigen Sie im Menü Extras auf Makros, und klicken Sie dann auf Microsoft Script Editor.
Fügen Sie das folgende Skript dem Current-Ereignis des MSODSC im HEAD Tag-Teil des HTML-Dokuments hinzu.
Hinweis
Sie müssen einen Parameter übergeben, damit das Ereignis ausgelöst wird.
<SCRIPT language=vbscript event=Current(oEventInfo) for=MSODSC> <!-- ImageFrame.src=txtImageName.value --> </SCRIPT>
Öffnen Sie die Seite dapImage in der Seitenansicht. Beachten Sie, dass auf der Seite die entsprechende Bitmap für jeden Datensatz angezeigt wird. Wenn das Feld txtImageName leer ist, wird ein Steuerelementsymbol angezeigt. Wenn das Bild nicht gefunden werden kann, wird im Bildsteuerelement ein X-Symbol angezeigt.
Verwenden eines http:// Pfads in einem Formular
Um einen http:// Pfad in einem Formular zu verwenden, verwenden Sie das Webbrowsersteuerelement (shdocvw.dll) wie folgt:
Fügen Sie dem Formular ein Microsoft-Webbrowser-Steuerelement hinzu, und nennen Sie es WebBrowser.
Fügen Sie einem Modul den folgenden Code hinzu:
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
Fügen Sie den folgenden Code hinter dem Formular hinzu:
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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für