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

  1. Otevřete ukázkovou databázi, Northwind.mdb nebo ukázkový projekt NorthwindCS.adp.

  2. 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
    
  3. 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

  1. 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
    
  2. Uložte modul jako Modul1.

Použití vlastní funkce ve formuláři

  1. 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 VisibletxtImageName na Hodnotu False.

  2. 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
    
  3. 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ě

  1. 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 VisibletxtImageName na Hodnotu False.

  2. 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
    
  3. 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

  1. 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 VisibilitytxtImageName na Skryté.

  2. V nabídce Nástrojepřejděte na Makra a potom klikněte na Microsoft Script Editor.

  3. 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>
    
  4. 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:

  1. Přidejte do formuláře ovládací prvek Microsoft Web Browser a pojmenujte ho WebBrowser.

  2. 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
    
  3. 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