Отображение изображений из папки в форме, отчете или на странице доступа к данным
Оригинальный номер базы знаний: 285820
Примечание.
Требуются экспертные навыки программирования, взаимодействия и многопользовательских навыков. Эта статья относится к базе данных Microsoft Access (.mdb/.accdb) и к проекту Microsoft Access (ADP).
Сводка
Иногда нецелесообразно хранить образы в таблице Microsoft Access. Если у вас много изображений или каждый из файлов изображений большой, размер файла базы данных Microsoft Access может быстро увеличиться.
В этой статье демонстрируется пользовательская функция, которую можно использовать для:
- Храните пути к файлам и имена изображений в таблице.
- Отображение изображений с помощью элемента управления изображением.
- Скрытие элемента управления изображением, если изображение недоступно.
- Оставьте отзыв о состоянии отображения изображения.
В этой статье также содержится пример скрипта Visual Basic, который можно использовать для отображения изображений на странице доступа к данным.
Примечание.
Хотя в этом примере используются растровые изображения (.bmp), можно также использовать другие типы изображений, например .jpg, PCX и .gif.
Корпорация Майкрософт предоставляет примеры программирования только в целях демонстрации без явной или подразумеваемой гарантии. Данное положение включает, но не ограничивается этим, подразумеваемые гарантии товарной пригодности или соответствия отдельной задаче. Эта статья предполагает, что пользователь знаком с представленным языком программирования и средствами, используемыми для создания и отладки процедур. Специалисты технической поддержки Майкрософт могут пояснить работу той или иной процедуры, но модификация примеров и их адаптация к задачам разработчика не предусмотрена.
Создание таблицы для хранения файлов и данных пути
Откройте пример базы данных, Northwind.mdb или пример проекта NorthwindCS.adp.
Создайте следующую таблицу в Northwind.mdb или в NorthwindCS.adp.
В 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
В 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
Откройте таблицу tblImage в режиме таблицы, а затем добавьте путь и имя точечных файлов в каждую запись. В следующей таблице примеров показано, как могут выглядеть записи:
Тип Пример Абсолютный (локальный) C:\Windows\Zapotec.bmp Абсолютный (UNC-путь) \\Servername\sharename\Zapotec.bmp Относительный Zapotec.bmp
Создание пользовательской функции
Создайте новый модуль, а затем вставьте или введите следующий код:
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
Сохраните модуль как Module1.
Использование пользовательской функции в форме
Создайте следующую новую форму на основе таблицы 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>
Примечание.
Если вы не хотите, чтобы путь отображались в форме, можно задать
Visible
для свойстваtxtImageName
элемента управления значение False.В меню Вид выберите пункт Код, а затем вставьте или введите следующий код:
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
Откройте форму frmImage в представлении формы. Обратите внимание, что форма отображает соответствующее растровое изображение для каждой записи.
txtImageName
Если поле пустое или изображение не удается найти, вы получаете соответствующие сообщения вместо рамки изображения.
Использование пользовательской функции в отчете
Создайте следующий новый отчет, основанный на таблице 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>
Примечание.
Если вы не хотите, чтобы путь отображались в отчете, можно задать
Visible
для свойстваtxtImageName
элемента управления значение False.В меню Вид выберите пункт Код, а затем вставьте или введите следующий код:
Option Compare Database Option Explicit Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer) Me!txtImageNote = DisplayImage(Me!ImageFrame, Me!txtImageName) End Sub
Откройте отчет rptImage в режиме предварительного просмотра. Обратите внимание, что в отчете отображается соответствующее растровое изображение для каждой записи.
txtImageName
Если поле пустое или изображение не удается найти, вы получаете соответствующие сообщения вместо рамки изображения.
Дублирование пользовательской функции на странице доступа к данным
Создайте следующую новую страницу доступа к данным, основанную на таблице 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
Примечание.
Если вы не хотите, чтобы путь отображался на странице, можно задать
Visibility
для свойстваtxtImageName
элемента управления значение Скрытый.В меню Сервис наведите указатель мыши на пункт Макросы и выберите пункт редактор скриптов (Майкрософт).
Добавьте следующий скрипт в текущее событие MSODSC в части тега HEAD HTML-документа.
Примечание.
Чтобы событие было активировано, необходимо передать параметр .
<SCRIPT language=vbscript event=Current(oEventInfo) for=MSODSC> <!-- ImageFrame.src=txtImageName.value --> </SCRIPT>
Откройте страницу dapImage в представлении страницы. Обратите внимание, что на странице отображается соответствующее растровое изображение для каждой записи. Если поле txtImageName пусто, отображается значок элемента управления. Если изображение не удается найти, в элементе управления изображением отображается значок X.
Использование http:// пути в форме
Чтобы использовать путь http:// в форме, используйте элемент управления веб-браузера (shdocvw.dll) следующим образом:
Добавьте элемент управления Microsoft Web Browser в форму и назовите его WebBrowser.
Добавьте следующий код в модуль:
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
Добавьте следующий код в форму:
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
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по