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
Öppna exempeldatabasen, Northwind.mdb eller exempelprojektet NorthwindCS.adp.
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
Ö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
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
Spara modulen som Modul1.
Använda den anpassade funktionen i ett formulär
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
egenskapentxtImageName
för kontrollen till Falskt.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
Ö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
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
egenskapentxtImageName
för kontrollen till Falskt.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
Ö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
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
egenskapentxtImageName
för kontrollen till Dold.Peka påMakron på verktygsmenyn och klicka sedan på Microsoft Skriptredigeraren.
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>
Ö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:
Lägg till en Microsoft Web Browser-kontroll i formuläret och ge det namnet WebBrowser.
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
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
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för