Oracle
 sql >> Database >  >> RDS >> Oracle

Eccezione sull'importazione dell'immagine BLOB nel report di ms Access

L'errore è in qualche modo autoesplicativo:un controllo immagine in Microsoft Access può essere associato a un percorso di file o può essere impostato su un .dib immagine (bitmap indipendente dal dispositivo formato , uno dei formati di immagine più oscuri).

Risolvere il problema, però, non è così facile.

Puoi aggirare questa limitazione in diversi modi:

  1. Utilizza un controllo ActiveX che supporti più formati di immagine (ce ne sono diversi disponibili)
  2. Salva l'immagine su disco in una cartella temporanea e imposta l'origine di controllo delle immagini nella sua posizione
  3. Utilizzare un controllo del browser Web e utilizzare l'HTML <img /> tag per visualizzare l'immagine, utilizzando un'immagine BASE64 incorporata

Ecco il codice di esempio per l'approccio 3:

Innanzitutto, dobbiamo essere in grado di convertire il codice binario contenuto nell'oggetto OLE in 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

Quindi, possiamo utilizzare un controllo del browser Web e inserire una pagina Web con l'immagine codificata BASE64 al suo interno:

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

Dove MyWebbrowserControl è il nome del controllo del tuo browser web, image/jpg è il tuo tipo di immagine e MyOLEObject è il tuo oggetto OLE.

Suggerimenti:

  • Non utilizzare il controllo WebBrowser ActiveX, ma utilizza quello fornito con Access. Altrimenti, otterrai una versione obsoleta di Internet Explorer con un bordo 3D che non può essere rimosso.
  • Imposta la sorgente di controllo per il controllo del browser web su ="about:blank" per inizializzarla come pagina vuota