Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Ausnahme beim Importieren von Blob-Bildern in den MS Access-Bericht

Der Fehler ist einigermaßen selbsterklärend:Ein Bildsteuerelement in Microsoft Access kann entweder an einen Dateispeicherort gebunden oder auf eine .dib gesetzt werden Bild (geräteunabhängige Bitmap formatieren , eines der obskureren Bildformate).

Das zu umgehen ist jedoch nicht so einfach.

Sie können diese Einschränkung auf verschiedene Weise umgehen:

  1. Verwenden Sie ein ActiveX-Steuerelement, das mehrere Bildformate unterstützt (es gibt mehrere zu finden)
  2. Speichern Sie das Bild in einem temporären Ordner auf der Festplatte und legen Sie die Steuerquelle für Bilder auf seinen Speicherort fest
  3. Verwenden Sie ein Webbrowser-Steuerelement und verwenden Sie den HTML-<img /> -Tag, um Ihr Bild anzuzeigen, indem Sie ein eingebettetes BASE64-Bild verwenden

Hier ist der Beispielcode für Ansatz 3:

Zunächst müssen wir in der Lage sein, den im OLE-Objekt enthaltenen Binärcode in BASE64:

umzuwandeln
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

Dann können wir ein Webbrowser-Steuerelement verwenden und eine Webseite mit dem BASE64-codierten Bild darin einfügen:

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

Wobei MyWebbrowserControl ist der Name Ihres Webbrowser-Steuerelements, image/jpg ist Ihr Bildtyp und MyOLEObject ist Ihr OLE-Objekt.

Tipps:

  • Verwenden Sie nicht das WebBrowser-ActiveX-Steuerelement, sondern das mit Access gelieferte. Andernfalls erhalten Sie eine veraltete Version von Internet Explorer mit einem 3D-Rahmen, der nicht entfernt werden kann.
  • Setzen Sie die Kontrollquelle für die Webbrowser-Kontrolle auf ="about:blank" um es als leere Seite zu initialisieren