Oracle
 sql >> база данни >  >> RDS >> Oracle

Изключение при импортиране на изображение на Blob в отчет на MS Access

Грешката донякъде се обяснява сама:контрола на изображението в Microsoft Access може да бъде обвързана с местоположение на файл или може да бъде зададена на .dib изображение (независима от устройството растерна карта формат , един от най-неясните формати на изображения).

Заобикалянето му обаче не е толкова лесно.

Можете да заобиколите това ограничение по няколко начина:

  1. Използвайте ActiveX контрола, която поддържа множество формати на изображения (има много, които могат да бъдат намерени)
  2. Запишете изображението на диска във временна папка и задайте източника на управление на изображенията на неговото местоположение
  3. Използвайте контрола на уеб браузър и използвайте HTML <img /> маркер за показване на вашето изображение, като използвате вградено BASE64 изображение

Ето примерния код за подход 3:

Първо, трябва да можем да конвертираме двоичния код, съдържащ се в OLE обекта, в 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

След това можем да използваме контрола на уеб браузър и да вмъкнем уеб страница с 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 е името на контролата на вашия уеб браузър, image/jpg е вашият тип изображение, а MyOLEObject е вашият OLE обект.

Съвети:

  • Не използвайте ActiveX контролата WebBrowser, а тази, която идва с Access. В противен случай ще получите остаряла версия на Internet Explorer с 3D рамка, която не може да бъде премахната.
  • Задайте източника на управление за контролата на уеб браузъра на ="about:blank" за да го инициализирате като празна страница



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да деактивирате кеша на Oracle за тестове за производителност

  2. Как да напиша скрипт за вмъкване на оракул с едно поле като CLOB?

  3. XAException в Websphere Application Server

  4. ORA-06502:PL/SQL:числова или стойностна грешка:буферът на символен низ е твърде малък, изключение от C# код

  5. Oracle sql:клауза за подреждане по и различна