sql >> Base de Datos >  >> RDS >> Oracle

Excepción al importar la imagen de Blob en el informe de ms Access

El error se explica por sí mismo:un control de imagen en Microsoft Access puede vincularse a una ubicación de archivo o puede establecerse en un .dib imagen (mapa de bits independiente del dispositivo formato , uno de los formatos de imagen más oscuros).

Sin embargo, solucionarlo no es tan fácil.

Puede evitar esa limitación de varias maneras:

  1. Utilice un control ActiveX que admita múltiples formatos de imagen (se pueden encontrar varios)
  2. Guarde la imagen en el disco en una carpeta temporal y establezca la fuente de control de imágenes en su ubicación
  3. Use un control de navegador web y use el HTML <img /> etiqueta para mostrar su imagen, usando una imagen BASE64 incrustada

Aquí está el código de ejemplo para el enfoque 3:

Primero, necesitamos poder convertir el código binario contenido en el objeto OLE a 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

Luego, podemos usar un control de navegador web e insertar una página web con la imagen codificada en 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

Donde MyWebbrowserControl es el nombre de su control de navegador web, image/jpg es su tipo de imagen y MyOLEObject es su objeto OLE.

Consejos:

  • No use el control ActiveX WebBrowser, use el que viene con Access. De lo contrario, obtendrá una versión obsoleta de Internet Explorer con un borde 3D que no se puede eliminar.
  • Establezca la fuente de control para el control del navegador web en ="about:blank" para inicializarlo como una página en blanco