Lỗi này hơi tự giải thích:điều khiển hình ảnh trong Microsoft Access có thể được liên kết với một vị trí tệp hoặc có thể được đặt thành .dib
image ( bitmap độc lập với thiết bị định dạng
, một trong những định dạng hình ảnh khó hiểu hơn).
Tuy nhiên, làm việc xung quanh nó không phải là dễ dàng.
Bạn có thể khắc phục hạn chế đó theo một số cách:
- Sử dụng điều khiển ActiveX hỗ trợ nhiều định dạng hình ảnh (có nhiều định dạng được tìm thấy)
- Lưu hình ảnh vào đĩa trong một thư mục tạm thời và đặt nguồn điều khiển hình ảnh vào vị trí của nó
- Sử dụng điều khiển trình duyệt web và sử dụng HTML
<img />
để hiển thị hình ảnh của bạn, sử dụng hình ảnh BASE64 được nhúng
Đây là mã ví dụ cho cách tiếp cận 3:
Đầu tiên, chúng ta cần có thể chuyển đổi mã nhị phân có trong đối tượng OLE thành 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
Sau đó, chúng tôi có thể sử dụng điều khiển trình duyệt web và chèn một trang web có hình ảnh được mã hóa BASE64 vào đó:
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
Ở đâu MyWebbrowserControl
là tên của điều khiển trình duyệt web của bạn, image/jpg
là loại hình ảnh của bạn và MyOLEObject
là đối tượng OLE của bạn.
Lời khuyên:
- Không sử dụng điều khiển WebBrowser ActiveX mà hãy sử dụng điều khiển đi kèm với Access. Nếu không, bạn sẽ nhận được phiên bản Internet Explorer lỗi thời với đường viền 3d không thể xóa được.
- Đặt nguồn điều khiển cho điều khiển trình duyệt web thành
="about:blank"
để khởi tạo nó dưới dạng một trang trống