Hur du visar 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 fleranvändarfärdigheter. Den här artikeln gäller 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.
I den här artikeln visas 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 även Visual Basic exempelskript 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
Öppna exempeldatabasen, Northwind.mdb eller exempelprojektet NorthwindCS.adp.
Skapa följande tabell 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: ImageIDI 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. I följande tabell med exempel visas hur posterna kan se ut:
Typ Exempel Absolut (lokal) C:\Windows\Zapotec.bmp Absolut (UNC-sökväg) \\Servername\sharename\Zapotec.bmp Relativ Zapotec.bmp
Skapa den anpassade funktionen
Skapa en ny modul och klistra sedan in eller skriv in 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 FunctionSpara modulen som Modul1.
Använda den anpassade funktionen i ett formulär
Skapa följande nya formulär som baseras på tblImage-tabellen.
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
Visibleegenskapen för kontrollen tilltxtImageNameFalse.Klicka på Kod på Visa-menyn och klistra sedan in eller skriv in 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 frmImage-formuläret 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 Bildtabell.
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 sätta
Visibleegenskapen för kontrollen tilltxtImageNameFalse.Klicka på Kod på Visa-menyn och klistra sedan in eller skriv in 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 rapportvyn i förhandsgranskningsvyn. 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 är baserad på tblImage-tabellen.
Data Access Page: dapImage ----------------------------- Title: Image Data Access Page Image Control --------------------------------- ID: ImageFrame Text box ---------------------- ID: txtImageID ControlSource: ImageID Text box --------------------------- ID: txtImageName ControlSource: txtImageNameAnteckning
Om du inte vill att sökvägen ska visas på sidan kan du ange
Visibilityegenskapen för kontrollen tilltxtImageNameDold.På menyn Verktyg pekar du på Makron och klickar sedan på Microsoft Skriptredigeraren.
Lägg till följande skript i aktuell händelse av MSODSC i HUVUD-taggdelen i HTML-dokumentet.
Anteckning
Du måste överföra 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:// i ett formulär
Om du vill http:// en sökväg i ett formulär använder du webbläsarkontrollen (shdocvw.dll) så här:
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 FunctionLä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