Могу ли я использовать «MyWebbrowserControl.Object» напрямую вместо управления изображениями? Изображение будет частью всего отчета (более или менее логотипом), поэтому должно помещаться внутри отчета, а не быть независимой страницей.

ете Access 2013 я подключаюсь к Oracle DB View через связанную таблицу. Одно поле просмотра имеет тип BLOB и содержит изображения, которые были ранее сохранены там.

В моем отчете о доступе связанная таблица имеет поле (с именем BILD_INHALT) типа «OLE Object», которое отображается в поле BLOB в Oracle DB.

В представлении отчета я создал поле «Изображение» (с именем MST_Image), чтобы загрузить изображение, и оно инициализируется следующим образом:

If Len(RS![BILD_INHALT]) > 0 Then
   Me.MST_Image.PictureData = RS![BILD_INHALT]
End If

Во время выполнения я получаю следующее исключение при инициализации MST_Image.PictureData с контентом, поступающим из Oracle.

Я проверяю в интернете дальнейшую документацию по этой (очень старой) теме, но я не смог найти ничего об этой конкретной проблеме.

Ответы на вопрос(1)

Решение Вопроса

элемент управления изображением в Microsoft Access может быть привязан к расположению файла или может быть установлен на.dib изображение (независимый от устройства растровый формат, один из самых малоизвестных форматов изображений).

Обойти это, однако, не так просто.

Вы можете обойти это ограничение несколькими способами:

Используйте элемент управления ActiveX, который поддерживает несколько форматов изображений (можно найти несколько)Сохраните изображение на диск во временной папке и установите источник управления изображениями в его местоположениеИспользуйте элемент управления веб-браузера и используйте HTML<img /> тег для отображения вашего изображения, используявстроенное изображение BASE64

Вот пример кода для подхода 3:

Во-первых, нам нужно иметь возможность преобразовать двоичный код, содержащийся в объекте OLE, в BASE64:

Public Function ToBase64(Bytes As Variant) As String
    Dim XMLElement As Object
    Set XMLElement = CreateObject("Msxml2.DOMDocument.6.0").createElement("tmp")
    XMLElement.DataType = "bin.base64"
    XMLElement.nodeTypedValue = Bytes
    ToBase64 = Replace(XMLElement.Text, vbLf, "")
End Function

Затем мы можем использовать элемент управления веб-браузера и вставить в него веб-страницу с изображением в кодировке BASE64:

Public Sub InsertImageInControl()
    Dim wb As Object
    Set wb = MyWebbrowserControl.Object
    With wb
        .Navigate2 "about:blank"
        Do Until .ReadyState = 4 '=READYSTATE_COMPLETE
            'This is a somewhat inefficient way to wait, but loading a blank page should only take a couple of milliseconds
            DoEvents
        Loop
        .Document.Open
        .Document.Write "<!DOCTYPE html><HTML><HEAD><TITLE>A</TITLE></HEAD><BODY scroll=""no"" style=""margin: 0px; padding: 0px;"">"
        .Document.Write "<img alt="""" style=""width:100%; margin: 0px; padding: 0px;"" src=""data:image/jpg;base64,"
        .Document.Write ToBase64(MyOLEObject.Value)
        .Document.Write """ />"
        .Document.Write "</BODY></HTML>"
        .Document.Close
    End With
End Sub

гдеMyWebbrowserControl это имя вашего веб-браузера,image/jpg ваш тип изображения, иMyOLEObject это ваш объект OLE.

Подсказки:

Не используйте элемент управления ActiveX WebBrowser, но используйте тот, который поставляется с Access. В противном случае вы получите устаревшую версию Internet Explorer с 3D-рамкой, которую невозможно удалить.Установите источник управления для элемента управления веб-браузера на="about:blank" инициализировать его как пустую страницу
 Francesco18 окт. 2017 г., 09:01
Я был бы признателен, если бы можно было увидеть ваш пример кода VBA, опубликовали ли вы его в блоге или вы можете сказать мне, как его получить? еще раз спасибо
 Francesco18 окт. 2017 г., 09:42
Могу ли я использовать «MyWebbrowserControl.Object» напрямую вместо управления изображениями? Изображение будет частью всего отчета (более или менее логотипом), поэтому должно помещаться внутри отчета, а не быть независимой страницей.
 Francesco18 окт. 2017 г., 08:53
Большое спасибо Эрику за ответ. Отчет о доступе был написан на VB.net моим коллегой, а источник базы данных Oracle (где изображения хранятся как BLOBS) находится под контролем клиента. Поскольку у меня есть только ограниченное время для решения проблем, я попробую с вашим вторым предложением.
 Erik A18 окт. 2017 г., 08:59
@Francesco Как уже говорилось, у меня есть пример кода VBA для третьего решения, и, хотя он может быть не коротким, он почти не требует изменений. Второе решение, однако, тоже подойдет. Я рекомендую прочитатьЧип Пирсонс работает с временными папками и файлами в VBA если вы пойдете на это.
 Erik A18 окт. 2017 г., 09:10
Я добавил пример здесь, вы можете просмотреть его и задать вопросы, если хотите. Обратите внимание, что Internet Explorer имеет тенденцию игнорироватьdata:image/jpg тип изображения, поэтому, если тип изображения не является постоянным, он также работает нормально.

Ваш ответ на вопрос