sql >> Databasteknik >  >> RDS >> Oracle

Undantag för import av Blob-bild till ms Access-rapport

Felet är något självförklarande:en bildkontroll i Microsoft Access kan antingen bindas till en filplats eller ställas in på en .dib bild (enhetsoberoende bitmapp format , ett av de mer obskyra bildformaten).

Det är dock inte så lätt att komma runt det.

Du kan kringgå den begränsningen på flera sätt:

  1. Använd en ActiveX-kontroll som stöder flera bildformat (det finns flera att hitta)
  2. Spara bilden på disken i en tillfällig mapp och ställ in bildkontrollkällan till dess plats
  3. Använd en webbläsarkontroll och använd HTML-koden <img /> tagga för att visa din bild med en inbäddad BASE64-bild

Här är exempelkoden för tillvägagångssätt 3:

Först måste vi kunna konvertera den binära koden som finns i OLE-objektet till 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

Sedan kan vi använda en webbläsarkontroll och infoga en webbsida med den BASE64-kodade bilden i den:

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

Där MyWebbrowserControl är namnet på din webbläsarkontroll, image/jpg är din bildtyp och MyOLEObject är ditt OLE-objekt.

Tips:

  • Använd inte WebBrowser ActiveX-kontrollen, utan använd den som följer med Access. Annars får du en föråldrad version av Internet Explorer med en 3D-kant som inte kan tas bort.
  • Ställ in kontrollkällan för webbläsarkontrollen till ="about:blank" för att initiera den som en tom sida



  1. htaccess url rewrite (db access)?

  2. mysql fulltextsökning misslyckades

  3. Infoga en textfil i Oracle med Bulk Insert

  4. Hur man automatiskt lägger till ett års datum till ett befintligt datum i SQL Server