sql >> Database >  >> RDS >> Oracle

Uitzondering bij het importeren van Blob-afbeelding in MS Access-rapport

De fout spreekt voor zich:een afbeeldingsbesturingselement in Microsoft Access kan ofwel worden gebonden aan een bestandslocatie, of kan worden ingesteld op een .dib afbeelding (apparaatonafhankelijke bitmap formaat , een van de meer obscure beeldformaten).

Er omheen werken is echter niet zo eenvoudig.

Je kunt die beperking op verschillende manieren omzeilen:

  1. Gebruik een ActiveX-besturingselement dat meerdere afbeeldingsindelingen ondersteunt (er zijn er meerdere te vinden)
  2. Sla de afbeelding op schijf op in een tijdelijke map en stel de besturingsbron voor afbeeldingen in op zijn locatie
  3. Gebruik een webbrowserbesturing en gebruik de HTML <img /> tag om uw afbeelding weer te geven, met behulp van een ingesloten BASE64-afbeelding

Hier is de voorbeeldcode voor benadering 3:

Eerst moeten we de binaire code in het OLE-object kunnen converteren naar 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

Vervolgens kunnen we een webbrowserbesturing gebruiken en een webpagina invoegen met de BASE64-gecodeerde afbeelding erin:

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

Waar MyWebbrowserControl is de naam van uw webbrowserbesturing, image/jpg is uw afbeeldingstype, en MyOLEObject is uw OLE-object.

Tips:

  • Gebruik niet het WebBrowser ActiveX-besturingselement, maar gebruik het besturingselement dat bij Access wordt geleverd. Anders krijgt u een verouderde versie van Internet Explorer met een 3D-rand die niet kan worden verwijderd.
  • Stel de besturingsbron voor de webbrowserbesturing in op ="about:blank" om het te initialiseren als een blanco pagina



  1. 4 Handige Commandline-tools om MySQL-prestaties in Linux te bewaken

  2. Is er een prestatieprobleem tijdens het gebruik van ISNULL() in SQL Server?

  3. Oracle 11G - Prestatie-effect van indexering bij invoegen

  4. Gegevenstype Oracle JDBC en Oracle CHAR