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

Undtagelse ved import af Blob-billede til ms Access-rapport

Fejlen er noget selvforklarende:en billedkontrol i Microsoft Access kan enten være bundet til en filplacering eller kan indstilles til en .dib billede (enhedsuafhængig bitmap format , et af de mere obskure billedformater).

Det er dog ikke så let at omgå det.

Du kan omgå denne begrænsning på flere måder:

  1. Brug et ActiveX-objekt, der understøtter flere billedformater (der er flere at finde)
  2. Gem billedet på disk i en midlertidig mappe, og indstil billedstyringskilden til dens placering
  3. Brug en webbrowserkontrol, og brug HTML-koden <img /> tag for at vise dit billede ved hjælp af et indlejret BASE64-billede

Her er eksempelkoden for tilgang 3:

Først skal vi være i stand til at konvertere den binære kode indeholdt i OLE-objektet til 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

Derefter kan vi bruge en webbrowserkontrol og indsætte en webside med det BASE64-kodede billede:

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

Hvor MyWebbrowserControl er navnet på din webbrowserkontrol, image/jpg er din billedtype og MyOLEObject er dit OLE-objekt.

Tip:

  • Brug ikke WebBrowser ActiveX-objektet, men brug det, der følger med Access. Ellers får du en forældet version af Internet Explorer med en 3d-kant, som ikke kan fjernes.
  • Indstil kontrolkilden for webbrowserkontrollen til ="about:blank" for at initialisere den som en tom side



  1. Hvor står Oracle ADF 11g blandt Java EE Frameworks?

  2. Hvordan tilføjer man kolonne i en tabel ved hjælp af laravel 5-migrering uden at miste sine data?

  3. utf8_bin vs. utf_unicode_ci

  4. Mysql tekstlagring?