Jak wyświetlać obrazy z folderu w formularzu, raporcie lub stronie dostępu do danych

Uwaga

Nazwa usługi Office 365 ProPlus została zmieniona na Aplikacje usługi Microsoft 365 dla przedsiębiorstw. Aby uzyskać więcej informacji na temat tej zmiany, przeczytaj ten wpis w blogu.

Oryginalny numer KB:   285820

Uwaga

Wymaga specjalistycznego kodowania, interoperacyjności i umiejętności wielu osób. Ten artykuł dotyczy bazy danych programu Microsoft Access (mdb/.accdb) i projektu programu Microsoft Access (.adp).

Podsumowanie

Czasami przechowywanie obrazów w tabeli programu Microsoft Access nie jest praktyczne. Jeśli masz wiele obrazów lub jeśli każdy z plików obrazów jest duży, rozmiar pliku bazy danych programu Microsoft Access może szybko wzrosnąć.

W tym artykule pokazano funkcję niestandardową, której można użyć do:

  • Przechowuj ścieżki plików i nazwy obrazów w tabeli.
  • Wyświetlanie obrazów za pomocą kontrolki obrazu.
  • Ukryj kontrolka obrazu, jeśli obraz nie jest dostępny.
  • Przekaż opinię na temat stanu wyświetlania obrazu.

Ten artykuł zawiera również przykładowy skrypt języka Visual Basic, którego można użyć do wyświetlania obrazów na stronie dostępu do danych.

Uwaga

Chociaż w tym przykładzie użyto obrazów bitmapowych (bmp), można również użyć innych typów obrazów, takich jak jpg, pcx i gif.

Firma Microsoft podaje przykłady programowania tylko dla celów ilustracyjnych, nie udzielając żadnej rękojmi, wyrażonej wprost ani dorozumianej, w tym także, ale nie tylko, dorozumianej rękojmi co do przydatności handlowej lub do określonych celów. W tym artykule zakłada się, że czytelnik zna demonstrowany język programowania oraz narzędzia używane do tworzenia i debugowania procedur. Wykwalifikowani pracownicy pomocy technicznej firmy Microsoft mogą pomóc w wyjaśnieniu, jak działa określona procedura, ale nie będą modyfikować tych przykładów ani dodawać żadnych funkcji i konstruować nowych procedur w celu dostosowania ich do określonych potrzeb użytkownika.

Tworzenie tabeli do przechowywania danych plików i ścieżek

  1. Otwórz przykładową bazę danych, Northwind.mdb lub przykładowy projekt NorthwindCS.adp.

  2. Utwórz poniższą tabelę w northwind.mdb lub w northwindcs.adp.

    W 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
    

    W 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. Otwórz tabelę tblImage w widoku arkusza danych, a następnie dodaj ścieżkę i nazwę pliku mapy bitowej do każdego rekordu. W poniższej tabeli przykładów pokazano, jak rekordy mogą wyglądać:

    Type (Typ) Przykład
    Bezwzględny (lokalny) C:\Windows\Zapotec.bmp
    Bezwzględny (ścieżka UNC) \\Nazwa serwera\nazwa_udziału\Zapotec.bmp
    Względne Zapotec.bmp

Tworzenie funkcji niestandardowej

  1. Utwórz nowy moduł, a następnie wklej lub wpisz następujący 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. Zapisz moduł jako moduł1.

Korzystanie z funkcji niestandardowej w formularzu

  1. Utwórz następujący nowy formularz, który jest oparty na tabeli 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>
    

    Uwaga

    Jeśli nie chcesz, aby ścieżka była wyświetlana w formularzu, można ustawić Visible właściwość txtImageName formantu na Fałsz.

  2. W menu Widok kliknij polecenie Kod, a następnie wklej lub wpisz następujący 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. Otwórz formularz frmImage w widoku formularza. Należy zauważyć, że w formularzu jest wyświetlana odpowiednia mapa bitowa dla każdego rekordu. Jeśli txtImageName pole jest puste lub nie można odnaleźć obrazu, zamiast ramki obrazu są wysyłane odpowiednie komunikaty.

Korzystanie z funkcji niestandardowej w raporcie

  1. Utwórz następujący nowy raport, który jest oparty na tabeli 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>
    

    Uwaga

    Jeśli nie chcesz, aby ścieżka pojawiała się w raporcie, możesz ustawić Visible właściwość txtImageName formantu na Fałsz.

  2. W menu Widok kliknij polecenie Kod, a następnie wklej lub wpisz następujący 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. Otwórz raport rptImage w podglądzie wydruku. Należy zauważyć, że raport wyświetla odpowiednią mapę bitową dla każdego rekordu. Jeśli txtImageName pole jest puste lub nie można odnaleźć obrazu, zamiast ramki obrazu są wysyłane odpowiednie komunikaty.

Powielanie funkcji niestandardowej na stronie dostępu do danych

  1. Utwórz następującą nową stronę dostępu do danych, która jest oparta na tabeli 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
    

    Uwaga

    Jeśli nie chcesz, aby ścieżka była wyświetlana na stronie, możesz ustawić Visibility właściwość txtImageName formantu na Ukryty.

  2. W menu Narzędzia wskaż polecenie Makra, a następnie kliknij polecenie Edytor skryptów firmy Microsoft.

  3. Dodaj następujący skrypt do bieżącego zdarzenia MSODSC w części tagu HEAD dokumentu HTML.

    Uwaga

    Należy przekazać parametr, aby zdarzenie było wyzwalane.

    <SCRIPT language=vbscript event=Current(oEventInfo) for=MSODSC>
    <!--
    ImageFrame.src=txtImageName.value
    -->
    </SCRIPT>
    
  4. Otwórz stronę dapImage w widoku strony. Należy zauważyć, że strona wyświetla odpowiednią mapę bitową dla każdego rekordu. Jeśli pole txtImageName jest puste, zostanie wyświetlona ikona formantu. Jeśli nie można odnaleźć obrazu, w formancie obrazu pojawi się ikona X.

Używanie ścieżki http:// w formularzu

Aby użyć ścieżki http:// w formularzu, użyj formantu przeglądarki sieci Web (shdocvw.dll) w następujący sposób:

  1. Dodaj kontrolkę przeglądarki microsoft web do formularza i nazwij go WebBrowser.

  2. Dodaj następujący kod do modułu:

    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. Dodaj następujący kod za formularzem:

    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