Jak zobrazit obrázky ze složky ve formuláři, sestavě nebo datové stránce
Původní číslo KB: 285820
Poznámka
Vyžaduje odborné kódování, interoperabilitu a víceuživatelské dovednosti. Tento článek se vztahuje na databázi Aplikace Microsoft Access (.mdb/.accdb) a projekt aplikace Microsoft Access (.adp).
Souhrn
Někdy není praktické ukládat obrázky do tabulky Microsoft Accessu. Pokud máte mnoho obrázků nebo pokud jsou všechny soubory obrázků velké, může se velikost souboru databáze Microsoft Accessu rychle zvětšit.
Tento článek ukazuje vlastní funkci, kterou můžete použít k:
- Uložte cesty k souborům a názvy obrázků v tabulce.
- Zobrazení obrázků pomocí ovládacího prvku Obrázek
- Skryjte ovládací prvek obrázek, pokud není k dispozici žádný obrázek.
- Poskytněte zpětnou vazbu ke stavu zobrazení obrázku.
Tento článek obsahuje také ukázkový skript jazyka Visual Basic, který můžete použít k zobrazení obrázků na datové stránce.
Poznámka
I když tento příklad používá rastrové obrázky (.bmp), můžete použít i jiné typy obrázků, například .jpg, .pcx a .gif.
Společnost Microsoft poskytuje ukázky programování pouze pro ilustraci, bez žádné záruky výslovně uvedené nebo odvozené, včetně, bez omezení, odvozených záruk vztahujících se k obchodovatelnosti nebo vhodnosti pro určitý účel. Tento článek předpokládá, že uživatel je obeznámen s programovacím jazykem, který je předmětem ukázky, a s nástroji použitými pro vytvoření a ladění skriptu. Pracovníci technické podpory společnosti Microsoft mohou vysvětlit funkce určitého postupu, nemohou však následující příklady rozšířit o další funkce nebo konstrukce podle konkrétních požadavků uživatele.
Vytvoření tabulky pro ukládání dat souborů a cest
Otevřete ukázkovou databázi, Northwind.mdb nebo ukázkový projekt NorthwindCS.adp.
Vytvořte následující tabulku buď v Northwind.mdb, nebo v Souboru NorthwindCS.adp.
V 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
V souboru 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
Otevřete tabulku tblImage v zobrazení Datový list a přidejte cestu a název rastrového souboru ke každému záznamu. Následující tabulka příkladů ukazuje, jak můžou záznamy vypadat:
Typ Příklad Absolutní (místní) C:\Windows\Zapotec.bmp Absolutní (cesta UNC) \\Servername\sharename\Zapotec.bmp Relativní Zapotec.bmp
Vytvoření vlastní funkce
Vytvořte nový modul a vložte nebo zadejte následující kód:
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
Uložte modul jako Modul1.
Použití vlastní funkce ve formuláři
Vytvořte následující nový formulář založený na tabulce 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>
Poznámka
Pokud nechcete, aby se cesta zobrazovala ve formuláři, můžete vlastnost ovládacího prvku nastavit
Visible
txtImageName
na Hodnotu False.V nabídce View (Zobrazení ) klikněte na Code (Kód) a vložte nebo zadejte následující kód:
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
Otevřete formulář frmImage ve formulářovém zobrazení. Všimněte si, že formulář zobrazí odpovídající rastrový obrázek pro každý záznam.
txtImageName
Pokud je pole prázdné nebo obrázek nelze najít, zobrazí se místo rámečku obrázku příslušné zprávy.
Použití vlastní funkce v sestavě
Vytvořte následující novou sestavu založenou na tabulce 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>
Poznámka
Pokud nechcete, aby se cesta v sestavě zobrazovala, můžete vlastnost ovládacího prvku nastavit
Visible
txtImageName
na Hodnotu False.V nabídce View (Zobrazení ) klikněte na Code (Kód) a vložte nebo zadejte následující kód:
Option Compare Database Option Explicit Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer) Me!txtImageNote = DisplayImage(Me!ImageFrame, Me!txtImageName) End Sub
Otevřete sestavu rptImage v náhledu tisku. Všimněte si, že sestava zobrazí odpovídající rastrový obrázek pro každý záznam.
txtImageName
Pokud je pole prázdné nebo obrázek nelze najít, zobrazí se místo rámečku obrázku příslušné zprávy.
Duplikování vlastní funkce na datové stránce
Vytvořte následující novou datovou stránku založenou na tabulce 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
Poznámka
Pokud nechcete, aby se cesta na stránce zobrazovala, můžete vlastnost ovládacího prvku nastavit
Visibility
txtImageName
na Skryté.V nabídce Nástrojepřejděte na Makra a potom klikněte na Microsoft Script Editor.
Do aktuální události MSODSC v části značek HEAD dokumentu HTML přidejte následující skript.
Poznámka
Aby se událost aktivovala, musíte předat parametr.
<SCRIPT language=vbscript event=Current(oEventInfo) for=MSODSC> <!-- ImageFrame.src=txtImageName.value --> </SCRIPT>
Otevřete stránku dapImage v zobrazení stránky. Všimněte si, že stránka zobrazí odpovídající rastrový obrázek pro každý záznam. Pokud je pole txtImageName prázdné, zobrazí se ikona ovládacího prvku. Pokud obrázek nelze najít, zobrazí se v ovládacím prvku obrázek ikona X.
Použití http:// cesty ve formuláři
Pokud chcete použít http:// cestu ve formuláři, použijte ovládací prvek webového prohlížeče (shdocvw.dll) následujícím způsobem:
Přidejte do formuláře ovládací prvek Microsoft Web Browser a pojmenujte ho WebBrowser.
Do modulu přidejte následující kód:
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
Za formulář přidejte následující kód:
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
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro