首页 > 代码库 > (转载)VB 查询Oracle中blob类型字段,并且把blob中的图片以流的方式显示在Image上
(转载)VB 查询Oracle中blob类型字段,并且把blob中的图片以流的方式显示在Image上
原文摘自:http://heisetoufa.iteye.com/blog/504068
‘模块代码Private Declare Function CreateStreamOnHGlobal Lib "ole32" (ByVal hGlobal As Long, ByVal fDeleteOnRelease As Long, ppstm As Any) As LongPrivate Declare Function OleLoadPicture Lib "olepro32" (pStream As Any, ByVal lSize As Long, ByVal fRunmode As Long, riid As Any, ppvObj As Any) As LongPrivate Declare Function CLSIDFromString Lib "ole32" (ByVal lpsz As Any, pclsid As Any) As LongPrivate Declare Function GlobalAlloc Lib "kernel32" (ByVal uFlags As Long, ByVal dwBytes As Long) As LongPrivate Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As LongPrivate Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As LongPrivate Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal dwLength As Long)Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As LongPublic Type GUID ‘ 16 bytes (128 bits)‘dwData1 As Long ‘ 4 bytes‘wData2 As Integer ‘ 2 bytes‘wData3 As Integer ‘ 2 bytesabData4(7) As Byte ‘ 8 bytes, zero basedEnd TypePublic Function PictureFromByteStream(B() As Byte) As IPicture Dim hMem As Long Dim lpMem As Long Dim LowerBound As Long Dim ByteCount As Long Dim IID_IPicture As GUID Dim istm As stdole.IUnknown LowerBound = LBound(B) ByteCount = UBound(B) - LowerBound + 1 hMem = GlobalAlloc(&H2, ByteCount) If hMem <> 0 Then lpMem = GlobalLock(hMem) If lpMem <> 0 Then MoveMemory ByVal lpMem, B(LowerBound), ByteCount GlobalUnlock hMem If CreateStreamOnHGlobal(hMem, 1, istm) = 0 Then If CLSIDFromString(StrPtr("{7BF80980-BF32-101A-8BBB-00AA00300CAB}"), IID_IPicture) = 0 Then OleLoadPicture ByVal ObjPtr(istm), ByteCount, 0, IID_IPicture, PictureFromByteStream End If End If End If End If End Function
Public Sub Combo1_Click()Dim adoCnn As ADODB.Connection Dim rstOra As ADODB.Recordset Dim intI As Integer Set adoCnn = New ADODB.Connection Set rstOra = New ADODB.Recordset adoCnn.ConnectionString = "Provider=OraOLEDB.Oracle;User ID=dzjc;password=zlkj;Data Source=dzjc_2005;" ‘读blob字段要用Provider=OraOLEDB.Oracle adoCnn.CursorLocation = adUseClient adoCnn.Open rstOra.CursorLocation = adUseClient rstOra.ActiveConnection = adoCnn rstOra.Open "SELECT zp FROM dzjc.dzjc_wfzp WHERE xh = ‘5‘" ‘Set Image1.DataSource = rstOra Set Image1.Picture = PictureFromByteStream(rstOra.Fields("zp").Value)End Sub
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。