Afbeeldingen uit een map weergeven in een formulier, een rapport of een Data Access-pagina

Origineel KB-nummer: 285820

Opmerking

Vereist professionele codering, interoperabiliteit en vaardigheden voor meerdere gebruikers. Dit artikel is van toepassing op een Microsoft Access-database (.mdb/.accdb) en op een Microsoft Access-project (.adp).

Samenvatting

Soms is het niet praktisch om afbeeldingen op te slaan in een Microsoft Access-tabel. Als u veel afbeeldingen hebt of als elk van uw afbeeldingsbestanden groot is, kan de grootte van het Microsoft Access-databasebestand snel toenemen.

In dit artikel wordt een aangepaste functie beschreven die u kunt gebruiken om het volgende te doen:

  • Bestandspaden en namen van afbeeldingen opslaan in een tabel.
  • Afbeeldingen weergeven met behulp van een besturingselement voor afbeeldingen.
  • Het besturingselement afbeelding verbergen als er geen afbeelding beschikbaar is.
  • Geef feedback over de weergavestatus van de afbeelding.

Dit artikel bevat ook een voorbeeld van een Visual Basic-script dat u kunt gebruiken om de afbeeldingen weer te geven op een Data Access-pagina.

Opmerking

Hoewel in dit voorbeeld bitmapafbeeldingen (.bmp) worden gebruikt, kunt u ook andere typen afbeeldingen gebruiken, zoals .jpg, .pcx en .gif.

Microsoft verstrekt programmeervoorbeelden alleen ter illustratie, zonder expliciete of impliciete garantie. daaronder mede begrepen, maar niet beperkt tot impliciete garanties met betrekking tot de verkoopbaarheid en/of geschiktheid voor een bepaald doel. In dit artikel wordt ervan uitgegaan dat u bekend bent met de programmeertaal VBScript, alsmede met de hulpprogramma's waarmee procedures worden gemaakt en waarmee fouten in procedures worden opgespoord. U kunt desgewenst contact opnemen met Microsoft Product Support Services voor uitleg over de functie van een bepaalde procedure. Microsoft Product Support Services is echter niet bereid de voorbeelden aan te passen om extra functies toe te voegen of om procedures te maken die aan uw specifieke eisen voldoen.

De tabel maken voor het opslaan van bestands- en padgegevens

  1. Open de voorbeelddatabase, Northwind.mdb of het voorbeeldproject NorthwindCS.adp.

  2. Maak de volgende tabel in Northwind.mdb of 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. Open de tabel tblImage in de gegevensbladweergave en voeg vervolgens het pad en de naam van een bitmapbestand toe aan elke record. In de volgende tabel met voorbeelden ziet u hoe de records eruit kunnen zien:

    Type Voorbeeld
    Absoluut (lokaal) C:\Windows\Zapotec.bmp
    Absoluut (UNC-pad) \\Servername\sharename\Zapotec.bmp
    Relatieve Zapotec.bmp

De aangepaste functie maken

  1. Maak een nieuwe module en plak of typ de volgende code:

    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. Sla de module op als Module1.

De aangepaste functie gebruiken in een formulier

  1. Maak het volgende nieuwe formulier dat is gebaseerd op de tabel 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>
    

    Opmerking

    Als u niet wilt dat het pad wordt weergegeven in het formulier, kunt u de Visible eigenschap van het txtImageName besturingselement instellen op Onwaar.

  2. Klik in het menu Beeld op Code en plak of typ de volgende code:

    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. Open het formulier frmImage in de formulierweergave. Houd er rekening mee dat in het formulier de bijbehorende bitmap voor elke record wordt weergegeven. Als het txtImageName veld leeg is of als de afbeelding niet kan worden gevonden, ontvangt u de juiste berichten in plaats van het afbeeldingsframe.

De aangepaste functie gebruiken in een rapport

  1. Maak het volgende nieuwe rapport dat is gebaseerd op de tabel 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>
    

    Opmerking

    Als u niet wilt dat het pad in het rapport wordt weergegeven, kunt u de Visible eigenschap van het txtImageName besturingselement instellen op Onwaar.

  2. Klik in het menu Beeld op Code en plak of typ de volgende code:

    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. Open het rptImage-rapport in afdrukvoorbeeld. Houd er rekening mee dat in het rapport de bijbehorende bitmap voor elke record wordt weergegeven. Als het txtImageName veld leeg is of als de afbeelding niet kan worden gevonden, ontvangt u de juiste berichten in plaats van het afbeeldingsframe.

De aangepaste functie dupliceren op een Data Access-pagina

  1. Maak de volgende nieuwe Data Access-pagina die is gebaseerd op de tabel 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
    

    Opmerking

    Als u niet wilt dat het pad op de pagina wordt weergegeven, kunt u de Visibility eigenschap van het txtImageName besturingselement instellen op Verborgen.

  2. Wijs in het menu Extra de optie Macro's aan en klik op Microsoft Script Editor.

  3. Voeg het volgende script toe aan de huidige gebeurtenis van de MSODSC in het koplabelgedeelte van het HTML-document.

    Opmerking

    U moet een parameter doorgeven om de gebeurtenis te activeren.

    <SCRIPT language=vbscript event=Current(oEventInfo) for=MSODSC>
    <!--
    ImageFrame.src=txtImageName.value
    -->
    </SCRIPT>
    
  4. Open de pagina dapImage in de paginaweergave. Houd er rekening mee dat op de pagina de bijbehorende bitmap voor elke record wordt weergegeven. Als het veld txtImageName leeg is, wordt er een besturingselementpictogram weergegeven. Als de afbeelding niet kan worden gevonden, wordt een X-pictogram weergegeven in het besturingselement afbeelding.

Een http://-pad in een formulier gebruiken

Als u een http:// pad in een formulier wilt gebruiken, gebruikt u het webbrowserbesturingselement (shdocvw.dll) als volgt:

  1. Voeg een Microsoft Web Browser-besturingselement toe aan het formulier en geef dit de naam Webbrowser.

  2. Voeg de volgende code toe aan een 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
    
  3. Voeg de volgende code achter het formulier toe:

    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