Oracle
 sql >> Base de données >  >> RDS >> Oracle

Exception lors de l'importation d'une image Blob dans le rapport ms Access

L'erreur est quelque peu explicite :un contrôle d'image dans Microsoft Access peut être soit lié à un emplacement de fichier, soit défini sur un .dib image (bitmap indépendant du périphérique format , l'un des formats d'image les plus obscurs).

Cependant, contourner ce problème n'est pas si simple.

Vous pouvez contourner cette limitation de plusieurs manières :

  1. Utilisez un contrôle ActiveX qui prend en charge plusieurs formats d'image (il en existe plusieurs)
  2. Enregistrez l'image sur le disque dans un dossier temporaire et définissez la source de contrôle des images sur son emplacement
  3. Utilisez un contrôle de navigateur Web et utilisez le code HTML <img /> tag pour afficher votre image, en utilisant une image BASE64 intégrée

Voici l'exemple de code pour l'approche 3 :

Premièrement, nous devons pouvoir convertir le code binaire contenu dans l'objet OLE en 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

Ensuite, nous pouvons utiliser un contrôle de navigateur Web et y insérer une page Web contenant l'image encodée 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

MyWebbrowserControl est le nom du contrôle de votre navigateur Web, image/jpg est votre type d'image, et MyOLEObject est votre objet OLE.

Conseils :

  • N'utilisez pas le contrôle ActiveX WebBrowser, mais utilisez celui fourni avec Access. Sinon, vous obtiendrez une version obsolète d'Internet Explorer avec une bordure 3D qui ne peut pas être supprimée.
  • Définissez la source de contrôle pour le contrôle du navigateur Web sur ="about:blank" pour l'initialiser comme une page vierge