L'errore è in qualche modo autoesplicativo:un controllo immagine in Microsoft Access può essere associato a un percorso di file o può essere impostato su un .dib
immagine (bitmap indipendente dal dispositivo formato
, uno dei formati di immagine più oscuri).
Risolvere il problema, però, non è così facile.
Puoi aggirare questa limitazione in diversi modi:
- Utilizza un controllo ActiveX che supporti più formati di immagine (ce ne sono diversi disponibili)
- Salva l'immagine su disco in una cartella temporanea e imposta l'origine di controllo delle immagini nella sua posizione
- Utilizzare un controllo del browser Web e utilizzare l'HTML
<img />
tag per visualizzare l'immagine, utilizzando un'immagine BASE64 incorporata
Ecco il codice di esempio per l'approccio 3:
Innanzitutto, dobbiamo essere in grado di convertire il codice binario contenuto nell'oggetto OLE in 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
Quindi, possiamo utilizzare un controllo del browser Web e inserire una pagina Web con l'immagine codificata BASE64 al suo interno:
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
Dove MyWebbrowserControl
è il nome del controllo del tuo browser web, image/jpg
è il tuo tipo di immagine e MyOLEObject
è il tuo oggetto OLE.
Suggerimenti:
- Non utilizzare il controllo WebBrowser ActiveX, ma utilizza quello fornito con Access. Altrimenti, otterrai una versione obsoleta di Internet Explorer con un bordo 3D che non può essere rimosso.
- Imposta la sorgente di controllo per il controllo del browser web su
="about:blank"
per inizializzarla come pagina vuota