Kesalahannya cukup jelas:kontrol gambar di Microsoft Access dapat diikat ke lokasi file, atau dapat diatur ke .dib
gambar (bitmap independen perangkat format
, salah satu format gambar yang lebih tidak jelas).
Namun, mengatasinya tidak semudah itu.
Anda dapat mengatasi batasan itu dengan beberapa cara:
- Gunakan kontrol ActiveX yang mendukung beberapa format gambar (ada beberapa yang dapat ditemukan)
- Simpan gambar ke disk di folder sementara, dan atur sumber kontrol gambar ke lokasinya
- Gunakan kontrol browser web, dan gunakan HTML
<img />
untuk menampilkan gambar Anda, menggunakan gambar BASE64 yang disematkan
Berikut adalah contoh kode untuk pendekatan 3:
Pertama, kita harus bisa mengonversi kode biner yang ada di objek OLE ke 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
Kemudian, kita dapat menggunakan kontrol browser web, dan menyisipkan halaman web dengan gambar yang dikodekan BASE64 ke dalamnya:
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
Dimana MyWebbrowserControl
adalah nama kontrol browser web Anda, image/jpg
adalah jenis gambar Anda, dan MyOLEObject
adalah objek OLE Anda.
Kiat:
- Jangan gunakan kontrol ActiveX WebBrowser, tetapi gunakan kontrol yang disertakan dengan Access. Jika tidak, Anda akan mendapatkan Internet Explorer versi lama dengan batas 3d yang tidak dapat dihapus.
- Setel sumber kontrol untuk kontrol browser web ke
="about:blank"
untuk menginisialisasinya sebagai halaman kosong