Fejlen er noget selvforklarende:en billedkontrol i Microsoft Access kan enten være bundet til en filplacering eller kan indstilles til en .dib
billede (enhedsuafhængig bitmap format
, et af de mere obskure billedformater).
Det er dog ikke så let at omgå det.
Du kan omgå denne begrænsning på flere måder:
- Brug et ActiveX-objekt, der understøtter flere billedformater (der er flere at finde)
- Gem billedet på disk i en midlertidig mappe, og indstil billedstyringskilden til dens placering
- Brug en webbrowserkontrol, og brug HTML-koden
<img />
tag for at vise dit billede ved hjælp af et indlejret BASE64-billede
Her er eksempelkoden for tilgang 3:
Først skal vi være i stand til at konvertere den binære kode indeholdt i OLE-objektet til 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
Derefter kan vi bruge en webbrowserkontrol og indsætte en webside med det BASE64-kodede billede:
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
Hvor MyWebbrowserControl
er navnet på din webbrowserkontrol, image/jpg
er din billedtype og MyOLEObject
er dit OLE-objekt.
Tip:
- Brug ikke WebBrowser ActiveX-objektet, men brug det, der følger med Access. Ellers får du en forældet version af Internet Explorer med en 3d-kant, som ikke kan fjernes.
- Indstil kontrolkilden for webbrowserkontrollen til
="about:blank"
for at initialisere den som en tom side