Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wyjątek dotyczący importowania obrazu obiektu Blob do raportu ms Access

Błąd jest dość oczywisty:kontrolka obrazu w programie Microsoft Access może być powiązana z lokalizacją pliku lub może być ustawiona na .dib obraz (niezależna od urządzenia mapa bitowa format , jeden z mniej znanych formatów graficznych).

Jednak obejście tego nie jest takie proste.

Możesz obejść to ograniczenie na kilka sposobów:

  1. Użyj kontrolki ActiveX, która obsługuje wiele formatów obrazów (można znaleźć wiele)
  2. Zapisz obraz na dysku w folderze tymczasowym i ustaw źródło sterowania obrazami na jego lokalizację
  3. Użyj kontrolki przeglądarki internetowej i użyj HTML <img /> do wyświetlenia obrazu, używając osadzonego obrazu BASE64

Oto przykładowy kod dla podejścia 3:

Po pierwsze, musimy być w stanie przekonwertować kod binarny zawarty w obiekcie OLE na 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

Następnie możemy użyć kontrolki przeglądarki internetowej i wstawić do niej stronę z obrazem zakodowanym w 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

Gdzie MyWebbrowserControl to nazwa kontrolki przeglądarki internetowej, image/jpg to Twój typ obrazu, a MyOLEObject jest twoim obiektem OLE.

Wskazówki:

  • Nie używaj formantu WebBrowser ActiveX, ale użyj tego, który jest dostarczany z programem Access. W przeciwnym razie otrzymasz przestarzałą wersję Internet Explorera z trójwymiarową ramką, której nie można usunąć.
  • Ustaw źródło kontrolki dla kontrolki przeglądarki internetowej na ="about:blank" aby zainicjować go jako pustą stronę



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy %NOTFOUND może zwrócić wartość null po pobraniu?

  2. TRANSLATE() Funkcja w Oracle

  3. logback logowanie w Oracle powoduje błąd dialektu

  4. Przekaż tablicę jako parametr wejściowy do procedury składowanej Oracle za pomocą prostego wywołania jdbc

  5. Zapytania SQL 00904. 00000 - %s:nieprawidłowy identyfikator