Jak wyświetlać obrazy z folderu w formularzu, raporcie lub na stronie dostępu do danych
Oryginalny numer KB: 285820
Uwaga
Wymaga specjalistycznego kodowania, współdziałania i wielodostępnych umiejętności. 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 przedstawiono funkcję niestandardową, która umożliwia:
- Przechowuj ścieżki plików i nazwy obrazów w tabeli.
- Wyświetlanie obrazów przy użyciu kontrolki obrazu.
- Ukryj kontrolkę obrazu, jeśli żaden 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 są używane obrazy mapy bitowej (.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
Otwórz przykładową bazę danych, Northwind.mdb lub przykładowy projekt NorthwindCS.adp.
Utwórz następującą tabelę w Northwind.mdb lub w pliku 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 pliku 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
Otwórz tabelę tblImage w widoku arkusza danych, a następnie dodaj ścieżkę i nazwę pliku mapy bitowej do każdego rekordu. Poniższa tabela przykładów pokazuje, jak mogą wyglądać rekordy:
Wpisać Przykład Wartość bezwzględna (lokalna) C:\Windows\Zapotec.bmp Bezwzględne (ścieżka UNC) \\Servername\sharename\Zapotec.bmp Względne Zapotec.bmp
Tworzenie funkcji niestandardowej
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
Zapisz moduł jako moduł Module1.
Używanie funkcji niestandardowej w formularzu
Utwórz następujący nowy formularz 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żesz ustawić
Visible
właściwość kontrolki natxtImageName
wartość False.W menu Widok kliknij pozycję 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
Otwórz formularz frmImage w widoku Formularz. Należy pamiętać, że formularz wyświetla odpowiednią mapę bitową dla każdego rekordu.
txtImageName
Jeśli pole jest puste lub nie można odnaleźć obrazu, otrzymasz odpowiednie komunikaty zamiast ramki obrazu.
Używanie funkcji niestandardowej w raporcie
Utwórz następujący nowy raport 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 była wyświetlana w raporcie, możesz ustawić
Visible
właściwość kontrolki natxtImageName
wartość False.W menu Widok kliknij pozycję 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
Otwórz raport rptImage w wersji zapoznawczej wydruku. Należy pamiętać, że raport wyświetla odpowiednią mapę bitową dla każdego rekordu.
txtImageName
Jeśli pole jest puste lub nie można odnaleźć obrazu, otrzymasz odpowiednie komunikaty zamiast ramki obrazu.
Duplikowanie funkcji niestandardowej na stronie dostępu do danych
Utwórz następującą nową stronę dostępu do danych opartą 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ść kontrolkitxtImageName
na Wartość ukryta.W menu Narzędzia wskaż pozycję Makra, a następnie kliknij pozycję Microsoft Script Editor.
Dodaj następujący skrypt do bieżącego zdarzenia MSODSC w części tagu HEAD dokumentu HTML.
Uwaga
Aby zdarzenie zostało wyzwolone, należy przekazać parametr.
<SCRIPT language=vbscript event=Current(oEventInfo) for=MSODSC> <!-- ImageFrame.src=txtImageName.value --> </SCRIPT>
Otwórz stronę dapImage w widoku strony. Należy pamiętać, że na stronie jest wyświetlana odpowiednia mapa bitowa dla każdego rekordu. Jeśli pole txtImageName jest puste, zostanie wyświetlona ikona kontrolki. Jeśli nie można odnaleźć obrazu, w kontrolce obrazu zostanie wyświetlona ikona X.
Używanie ścieżki http:// w formularzu
Aby użyć ścieżki http:// w formularzu, użyj kontrolki przeglądarki sieci Web (shdocvw.dll) w następujący sposób:
Dodaj kontrolkę Microsoft Web Browser do formularza i nadaj jej nazwę WebBrowser.
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
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
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla