sql >> Databáze >  >> RDS >> Oracle

Výjimka při importu obrázku BLOB do sestavy ms Access

Chyba je poněkud samovysvětlující:ovládací prvek obrázku v aplikaci Microsoft Access může být buď vázán na umístění souboru, nebo může být nastaven na .dib obrázek (bitmapa nezávislá na zařízení formát , jeden z nejobskurnějších formátů obrázků).

Práce kolem toho však není tak snadná.

Toto omezení můžete obejít několika způsoby:

  1. Použijte ovládací prvek ActiveX, který podporuje více formátů obrázků (je jich několik)
  2. Uložte obrázek na disk do dočasné složky a nastavte zdroj ovládání obrázků na jeho umístění
  3. Použijte ovládací prvek webového prohlížeče a použijte HTML <img /> tag pro zobrazení vašeho obrázku pomocí vloženého obrázku BASE64

Zde je příklad kódu pro přístup 3:

Nejprve musíme být schopni převést binární kód obsažený v objektu 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

Poté můžeme použít ovládací prvek webového prohlížeče a vložit do něj webovou stránku s obrázkem v kódování 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

Kde MyWebbrowserControl je název ovládacího prvku vašeho webového prohlížeče, image/jpg je váš typ obrázku a MyOLEObject je váš objekt OLE.

Tipy:

  • Nepoužívejte ovládací prvek ActiveX WebBrowser, ale použijte ovládací prvek, který je součástí aplikace Access. V opačném případě získáte zastaralou verzi Internet Exploreru s 3D ohraničením, které nelze odstranit.
  • Nastavte zdroj ovládacího prvku pro ovládací prvek webového prohlížeče na ="about:blank" jej inicializovat jako prázdnou stránku



  1. Převést „smalldatetime“ na „čas“ v SQL Server (příklady T-SQL)

  2. LoadError při pokusu o použití MySQL s Ruby on Rails ve Windows, RubyMine IDE

  3. Jak získat názvy sloupců spolu se sadou výsledků v php/mysql?

  4. Jak získat nejnovější záznam z tabulky SQL Server na základě časového razítka