Грешката донякъде се обяснява сама:контрола на изображението в 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"
за да го инициализирате като празна страница