Så här visar du bilder från en mapp i ett formulär, en rapport eller en dataåtkomstsida

Anteckning

Office 365 ProPlus byter namn till Microsoft 365-appar för företag. Mer information om den här ändringen finns i det här blogginlägget.

Ursprungligt KB-nummer:   285820

Anteckning

Kräver expertkodning, interoperabilitet och multianvändarkompetens. Den här artikeln gäller för en Microsoft Access-databas (.mdb/.accdb) och ett Microsoft Access-projekt (.adp).

Sammanfattning

Ibland är det inte praktiskt att lagra bilder i en Microsoft Access-tabell. Om du har många bilder, eller om var och en av dina bildfiler är stor, kan storleken på Microsoft Access-databasfilen snabbt öka.

Den här artikeln visar en anpassad funktion som du kan använda för att:

  • Lagra filsökvägar och namn på bilder i en tabell.
  • Visa bilder med hjälp av en bildkontroll.
  • Dölj bildkontrollen om det inte finns någon bild tillgänglig.
  • Ge feedback om bildens visningsstatus.

Den här artikeln innehåller också exempel på Visual Basic-skript som du kan använda för att visa bilderna på en dataåtkomstsida.

Anteckning

Även om det här exemplet använder bitmappsbilder (.bmp) kan du också använda andra bildtyper, till exempel .jpg, .pcx och .gif.

Microsoft tillhandahåller programmeringsexempel enbart i förklarande syfte och gör inga utfästelser, varken uttryckligen eller underförstått. Detta omfattar men begränsas inte till underförstådd garanti för säljbarhet eller lämplighet för ett visst syfte. I denna artikel förutsätts att du känner till det programmeringsspråk som demonstreras och de verktyg som används för att skapa och felsöka procedurer. Microsofts supportexperter kan hjälpa till att förklara funktionerna i en viss procedur, men de kommer inte att ändra dessa exempel för att tillhandahålla extra funktioner eller konstruera procedurer för att uppfylla dina specifika behov.

Skapa tabellen för att lagra fil- och sökvägsdata

  1. Öppna exempeldatabasen Northwind.mdb eller exempelprojektet NorthwindCS.adp.

  2. Skapa följande tabell antingen i Northwind.mdb eller i NorthwindCS.adp.

    I 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
    

    I 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. Öppna tblImage-tabellen i databladsvyn och lägg sedan till sökvägen och namnet på en bitmappsfil i varje post. Följande tabell med exempel visar hur posterna kan se ut:

    Type (Typ) Exempel
    Absolut (lokalt) C:\Windows\Zapotec.bmp
    Absolut (UNC-sökväg) \\Servername\sharename\Zapotec.bmp
    Relativa Zapotec.bmp (på andra sätt)

Skapa den anpassade funktionen

  1. Skapa en ny modul och klistra sedan in eller skriv följande kod:

    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. Spara modulen som modul1.

Använda den anpassade funktionen i ett formulär

  1. Skapa följande nya formulär som baseras på tabellen 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>
    

    Anteckning

    Om du inte vill att sökvägen ska visas i formuläret kan du ange Visible txtImageName egenskapen för kontrollen till False.

  2. Klicka på KodVisa-menyn och klistra sedan in eller skriva följande kod:

    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. Öppna frmImage-formuläret i formulärvyn. Observera att formuläret visar motsvarande bitmapp för varje post. Om txtImageName fältet är tomt eller om bilden inte kan hittas får du lämpliga meddelanden i stället för bildramen.

Använda den anpassade funktionen i en rapport

  1. Skapa följande nya rapport som baseras på tabellen 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>
    

    Anteckning

    Om du inte vill att sökvägen ska visas i rapporten kan du ange Visible txtImageName egenskapen för kontrollen till False.

  2. Klicka på KodVisa-menyn och klistra sedan in eller skriva följande kod:

    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. Öppna rptImage-rapporten i förhandsgranskningen. Observera att motsvarande bitmapp för varje post visas i rapporten. Om txtImageName fältet är tomt eller om bilden inte kan hittas får du lämpliga meddelanden i stället för bildramen.

Duplicera den anpassade funktionen på en dataåtkomstsida

  1. Skapa följande nya dataåtkomstsida som baseras på tabellen 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
    

    Anteckning

    Om du inte vill att sökvägen ska visas på sidan kan du ange Visibility txtImageName egenskapen för kontrollen till Dold.

  2. Peka på Makron på Verktyg-menyn och klicka sedan på Microsoft Skriptredigeraren. Macros

  3. Lägg till följande skript i den aktuella händelsen för MSODSC i HEAD-taggdelen av HTML-dokumentet.

    Anteckning

    Du måste skicka in en parameter för att händelsen ska kunna utlösas.

    <SCRIPT language=vbscript event=Current(oEventInfo) for=MSODSC>
    <!--
    ImageFrame.src=txtImageName.value
    -->
    </SCRIPT>
    
  4. Öppna sidan dapImage i sidvyn. Observera att motsvarande bitmapp för varje post visas på sidan. Om txtImageName-fältet är tomt visas en kontrollikon. Om bilden inte kan hittas visas en X-ikon i bildkontrollen.

Använda en http:// bana i ett formulär

Om du vill använda en http:// sökväg i ett formulär använder du webbläsarkontrollen (shdocvw.dll) på följande sätt:

  1. Lägg till en Microsoft-webbläsarkontroll i formuläret och namnge den WebBrowser.

  2. Lägg till följande kod i en modul:

    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. Lägg till följande kod bakom formuläret:

    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