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

  1. Öffnen Sie die Beispieldatenbank, Northwind.mdb oder das Beispielprojekt NorthwindCS.adp.

  2. 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
    
  3. Ö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

  1. 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
    
  2. Speichern Sie das Modul als Modul1.

Verwenden der benutzerdefinierten Funktion in einem Formular

  1. 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 des txtImageName Steuerelements auf False festlegen.

  2. 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
    
  3. Ö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

  1. 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 des txtImageName Steuerelements auf False festlegen.

  2. 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
    
  3. Ö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

  1. 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 des txtImageName Steuerelements auf Ausgeblendet festlegen.

  2. Zeigen Sie im Menü Extras auf Makros, und klicken Sie dann auf Microsoft Script Editor.

  3. 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>
    
  4. Ö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:

  1. Fügen Sie dem Formular ein Microsoft-Webbrowser-Steuerelement hinzu, und nennen Sie es WebBrowser.

  2. 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
    
  3. 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