小弟弟用VB6.0创建了一个窗体应用程序,在该窗体上放置了一个图形框Image1,还有一个ADO控件Adodc1。
我已经设计好了数据库Student.mdb,该数据库中有一个名为“基本情况”的表,
该表有一个名为“照片”的字段,该字段的类型为OLE对象,
小弟弟在该字段内增加了两条记录“01.gif”和“02.jpg”。
小弟弟把Image1的DataSource属性设为Adodc1,DataField属性设为“照片”。
然后运行程序,结果弹出一个警告,说不能绑定到字段或数据成员:‘照片’。
小弟弟知道要用到二进制文件与GetChunk方法,但具体实现老出问题。
请各位仁兄帮忙指点迷津!!!!
我已经设计好了数据库Student.mdb,该数据库中有一个名为“基本情况”的表,
该表有一个名为“照片”的字段,该字段的类型为OLE对象,
小弟弟在该字段内增加了两条记录“01.gif”和“02.jpg”。
小弟弟把Image1的DataSource属性设为Adodc1,DataField属性设为“照片”。
然后运行程序,结果弹出一个警告,说不能绑定到字段或数据成员:‘照片’。
小弟弟知道要用到二进制文件与GetChunk方法,但具体实现老出问题。
请各位仁兄帮忙指点迷津!!!!
解决方案 »
- [求助]一个SQL的联合查询语句
- 求助:谁能帮我编一个后台运行*.bat的程序?
- VB+ACCESS里对象数据类型为文本如何取
- 数据怎么输出到第二个文本框或者输出到文本文件打开?
- bmp转换为jpg,并能够减小图片大小
- 正则表达式的问题
- 哪个朋友还在用Formula one 5.0啊?请给我传一个。
- 一个初级问题
- 求助!谁有progame的将MSFlexGrid中的数据打印出来的程序!我急用!信箱:[email protected]或[email protected]
- 请大家声讨bluestar007 为CSDN的安全,为大家的利益,为中国软件的明天声讨bluestar007
- VB如何读这样的TXT文件!然后转换成以豆号隔开?
- 排列问题
Private Sub Command2_Click()
Dim f1 As Single
Dim strb() As Byte
CommonDialog1.ShowOpen
Open CommonDialog1.FileName For Binary As #1
f1 = LOF(1)
ReDim strb(f1)
Get #1, , strb
Adodc1.Recordset.Fields("photo").AppendChunk strb
Close #1
Image1.Picture = LoadPicture(CommonDialog1.FileName)
End Sub这是把图片写入数据库的代码
一般不会出现不能绑定的问题,你再重新试一下吧
打开vb6,新建工程。添加两个按钮,一个image控件
注意:Access中的photo字段类型为OLE对象.
SqlServer中的photo字段类型为Image'** 引用 Microsoft ActiveX Data Objects 2.5 Library 及以上版本
‘2.5版本以下不支持Stream对象
Dim iConcstr As String
Dim iConc As ADODB.Connection
'保存文件到数据库中
Sub s_SaveFile()
Dim iStm As ADODB.Stream
Dim iRe As ADODB.Recordset
Dim iConcstr As String '读取文件到内容
Set iStm = New ADODB.Stream
With iStm
.Type = adTypeBinary '二进制模式
.Open
.LoadFromFile App.Path + "\test.jpg"
End With
'打开保存文件的表
Set iRe = New ADODB.Recordset
With iRe
.Open "select * from img", iConc, 1, 3
.AddNew '新增一条记录
.Fields("photo") = iStm.Read
.Update
End With
'完成后关闭对象
iRe.Close
iStm.Close
End Sub
Sub s_ReadFile()
Dim iStm As ADODB.Stream
Dim iRe As ADODB.Recordset
'打开表
Set iRe = New ADODB.Recordset
‘得到最新添加的纪录
iRe.Open "select top 1 * from img order by id desc", iConc, adOpenKeyset, adLockReadOnly
'保存到文件
Set iStm = New ADODB.Stream
With iStm
.Mode = adModeReadWrite
.Type = adTypeBinary
.Open
.Write iRe("photo")
‘这里注意了,如果当前目录下存在test1.jpg,会报一个文件写入失败的错误.
.SaveToFile App.Path & "\test1.jpg"
End With
Image1.Picture = LoadPicture(App.Path & "\test1.jpg")
'关闭对象
iRe.Close
iStm.Close
End Sub
Private Sub Command1_Click()
Call s_ReadFile
End Sub
Private Sub Command2_Click()
Call s_SaveFile
End Sub
Private Sub Form_Load()
'数据库连接字符串
iConcstr = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
";Data Source=F:\csdn_vb\database\保存图片\access图片\img.mdb"‘下面的语句是连接sqlserver数据库的.
‘iConcstr = "Provider=SQLOLEDB.1;Persist Security Info=True;" & _
‘ "User ID=sa;Password=;Initial Catalog=test;Data Source=yang"
Set iConc = New ADODB.Connection
iConc.Open iConcstr
End Sub
Private Sub Form_Unload(Cancel As Integer)
iConc.Close
Set iConc = Nothing
End Sub
在Student.mdb的基本情况表的照片字段中,我已经加入了两张图片,并且Adodc1已经与基本情况表建立了连接。
这样,应该不需要再向数据库中写入数据了吧。也就是说,数据库中已经存在了所需数据,不需再写入。
我只需要能够将Image1绑定到“照片”字段的代码,最好能用到GetChunk方法。
最终的运行结果应该是:
一运行程序,Image1中就出现数据库Student.mdb的基本情况表的照片字段中的第一个图片,
当单击adodc1的右箭头时,Image1内就显示第二张图片。1楼的要用到通用对话框,只是想数据库中写入数据,这个我会。2楼的代码有些看不懂,而且有些长。我想这是一个小功能,不需要那么多的代码吧。不管怎样,还是非常感谢各位的帮忙,嘿嘿
是不是嫌分少啊,我加分还不成吗
2楼的代码,你看了应该欣喜若狂才对。
那个s_ReadFile子程序,就是显示图片的,你拿来稍微改动就可用了。难道让人家喂饭到你嘴里阿。
Dim iStm As ADODB.Stream
Dim iRe As ADODB.Recordset
'打开表
Set iRe = New ADODB.Recordset
'得到最新添加的纪录
iRe.Open "select top 1 * from img order by id desc", iConc, adOpenKeyset, adLockReadOnly
'保存到文件
Set iStm = New ADODB.Stream
With iStm
.Mode = adModeReadWrite
.Type = adTypeBinary
.Open
.Write iRe("photo")
'这里注意了,如果当前目录下存在test1.jpg,会报一个文件写入失败的错误.
.SaveToFile App.Path & "\test1.jpg"
End With
Image1.Picture = LoadPicture(App.Path & "\test1.jpg") '***************************
'关闭对象
iRe.Close
iStm.Close
End Sub
你把他那里的iRe换成你的ADODC1就可以了。
对于VB中的对象我几乎不会使用,所以看不懂Stream流对象,见笑见笑,惭愧惭愧!
2楼的代码,在SaveToFile之前可以加上这么一句话 If Dir(App.Path & "\test1.jpg") <> "" Then
Kill App.Path & "\test1.jpg"
End If