Felet är något självförklarande:en bildkontroll i Microsoft Access kan antingen bindas till en filplats eller ställas in på en .dib
bild (enhetsoberoende bitmapp format
, ett av de mer obskyra bildformaten).
Det är dock inte så lätt att komma runt det.
Du kan kringgå den begränsningen på flera sätt:
- Använd en ActiveX-kontroll som stöder flera bildformat (det finns flera att hitta)
- Spara bilden på disken i en tillfällig mapp och ställ in bildkontrollkällan till dess plats
- Använd en webbläsarkontroll och använd HTML-koden
<img />
tagga för att visa din bild med en inbäddad BASE64-bild
Här är exempelkoden för tillvägagångssätt 3:
Först måste vi kunna konvertera den binära koden som finns i OLE-objektet till 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
Sedan kan vi använda en webbläsarkontroll och infoga en webbsida med den BASE64-kodade bilden i den:
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
Där MyWebbrowserControl
är namnet på din webbläsarkontroll, image/jpg
är din bildtyp och MyOLEObject
är ditt OLE-objekt.
Tips:
- Använd inte WebBrowser ActiveX-kontrollen, utan använd den som följer med Access. Annars får du en föråldrad version av Internet Explorer med en 3D-kant som inte kan tas bort.
- Ställ in kontrollkällan för webbläsarkontrollen till
="about:blank"
för att initiera den som en tom sida