Visa bilder från en mapp i ett formulär, en rapport eller en dataåtkomstsida

Ursprungligt KB-nummer: 285820

Obs!

Kräver expertkunskaper om kodning, samverkan och multianvändare. 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 stora, 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 tillgänglig bild.
  • Ge feedback om bildens visningsstatus.

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

Obs!

Ä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 tabellen tblImage 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:

    Typ Exempel
    Absolut (lokal) C:\Windows\Zapotec.bmp
    Absolut (UNC-sökväg) \\Servername\sharename\Zapotec.bmp
    Relativa Zapotec.bmp

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>
    

    Obs!

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

  2. På menyn Visa klickar du på Kod och klistrar sedan in eller skriver 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 formuläret frmImage i formulärvyn. Observera att formuläret visar motsvarande bitmapp för varje post. Om fältet txtImageName ä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>
    

    Obs!

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

  2. På menyn Visa klickar du på Kod och klistrar sedan in eller skriver 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 rapporten visar motsvarande bitmapp för varje post. Om fältet txtImageName ä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
    

    Obs!

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

  2. Peka Makron på verktygsmenyn och klicka sedan på Microsoft Skriptredigeraren.

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

    Obs!

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

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

Använda en http:// sökväg 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 Web Browser-kontroll i formuläret och ge det namnet 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