将图像上传到图像activex控件从vba excel中的二进制类型

时间:2014-04-29 14:15:21

标签: excel vba

目前我正在使用VBA Excel,我正在尝试从sql server导入图像(.png)。我已完全将图像插入到二进制类型的sql server中。这是我已经完成的SQL查询。

INSERT INTO [DemoDatabase]。[dbo]。[well_image]([well_img]) SELECT BulkColumn 从openrowset(批量'C:\ Users \ Pictures \ 003.png',Single_Blob)as img

然后我尝试选择从sql server获取图像并将其显示在 image activex control 中,但它会给我一个错误。

运行时错误,需要对象。 (错误)

下面我提供您的概述代码。

Set rs = New ADODB.Recordset
Set stm = New ADODB.Stream

Dim sqlquery As String

sqlquery = "SELECT [well_img] FROM well_image WHERE [img_id] = 2"

rs.Open sqlquery, objConnection, adOpenStatic, adLockOptimistic

stm.Type = adTypeBinary
stm.Open
stm.Write rs("well_img").Value   'write bytes to stream
stm.Position = 0

'Sheet1.OLEObjects("well_img").Object.Picture = stm.Read 'load bytes into image control on form
 Sheet1.well_img.Picture = stm.Read    ***here is the problem

stm.Close
rs.Close
objConnection.Close

当我调试时,这一行是问题“Sheet1.well_img.Picture = stm.Read”。 我需要你的帮助。请帮助我,谢谢你的考虑。

2 个答案:

答案 0 :(得分:1)

我没有真正为您提供解决方案,但我不相信您可以通过这种方式加载图片。来自msdn

  

注意在运行时,Picture属性可以设置为任何其他属性   对象的DragIcon,Icon,Image或Picture属性,或者您可以分配   它是LoadPicture函数返回的图形。例外   这是ListImages对象的Picture属性,它是一个   只读属性。

LoadPicture函数也将文件路径作为参数。本文解释了how to store and load images from an Access database。不幸的是,这一切都没有解决您的问题,但我希望它可以告诉您为什么不能按照您尝试的方式完成。

答案 1 :(得分:0)

很抱歉迟到的回复。我已经尝试了所有你给出的解决方案,但仍然无效。然后我尝试用另一种方法来做到这一点。即使这不是回答问题,但我只是想分享我已经完成的事情。


现在我将图像数据类型设置为string / varchar。这是因为我打算保存图像名称,图像本身保存到我设置的特定文件夹中。这就是我这样做的方式。

代码


Dim imgDir as String, imgName as String
imgDir = "C:\Users\pc\Pictures\img\"
imgName = "test.jpg"

'copy img from source directory to destination directory
Dim destinationImg As String
destinationImg = "C:\Users\pc\Pictures\img\" & imgName

'FileCopy is a method that copy file to specific folder/directory
FileCopy imgDir, destinationImg   

'-----------------
'insert imgName to database
'set up connection
Call serverConn

Dim sqlquery As String
sqlquery = "INSERT INTO well_img ([img_name]) " & _
           "VALUES ('" & imgName & "') "

objConnection.Execute sqlquery

' close connection
objConnection.Close
Set objConnection = Nothing

这就是我显示图像的方式。我使用image activeX控件。

Dim destinationImg As String
destinationImg = "C:\Users\pc\Pictures\img\" & imgName

Sheet2.dwnload_img.Picture = LoadPicture(destinationImg)

这一切都来自我。欢迎任何改进,谢谢大家。 :)