小弟弟的处女贴:请教VB6.0中的数据库连接问题

云水千寻 2008-12-15 11:38:43
小弟弟用VB6.0创建了一个窗体应用程序,在该窗体上放置了一个图形框Image1,还有一个ADO控件Adodc1。
我已经设计好了数据库Student.mdb,该数据库中有一个名为“基本情况”的表,
该表有一个名为“照片”的字段,该字段的类型为OLE对象,
小弟弟在该字段内增加了两条记录“01.gif”和“02.jpg”。
小弟弟把Image1的DataSource属性设为Adodc1,DataField属性设为“照片”。
然后运行程序,结果弹出一个警告,说不能绑定到字段或数据成员:‘照片’。
小弟弟知道要用到二进制文件与GetChunk方法,但具体实现老出问题。
请各位仁兄帮忙指点迷津!!!!
...全文
221 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
vbscape 2008-12-24
  • 打赏
  • 举报
回复
楼主知道GetChunk也不算菜鸟了。GetChunk比较麻烦,要循环读取图片。自从ADO有了Stream,就没人再愿意用GetChunk了。
2楼的代码,在SaveToFile之前可以加上这么一句话

If Dir(App.Path & "\test1.jpg") <> "" Then
Kill App.Path & "\test1.jpg"
End If
xrongzhen 2008-12-23
  • 打赏
  • 举报
回复
楼主估计看到那么长一段代码就晕了 呵呵 把2楼的实现读图的代码加上框

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
vbscape 2008-12-23
  • 打赏
  • 举报
回复
楼主,怎么说你好呢。
2楼的代码,你看了应该欣喜若狂才对。
那个s_ReadFile子程序,就是显示图片的,你拿来稍微改动就可用了。难道让人家喂饭到你嘴里阿。
lanhai96 2008-12-23
  • 打赏
  • 举报
回复
二楼已经够详尽了。建议楼主详细阅读,并且灵活运用。
二楼的肃然代码看起来多了点,但结构很明晰,看起来很流畅,慢慢来吧。
云水千寻 2008-12-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 vbscape 的回复:]
ADODC跟ADO冲突?笑话。
你把他那里的iRe换成你的ADODC1就可以了。
[/Quote]老兄,俺认错了,但是对于一个菜鸟来说这也是没办法啊。我也是刚接触VB,只学习了基本数据类型。
对于VB中的对象我几乎不会使用,所以看不懂Stream流对象,见笑见笑,惭愧惭愧!
vbscape 2008-12-23
  • 打赏
  • 举报
回复
ADODC跟ADO冲突?笑话。
你把他那里的iRe换成你的ADODC1就可以了。
云水千寻 2008-12-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 vbscape 的回复:]
楼主,怎么说你好呢。
2楼的代码,你看了应该欣喜若狂才对。
那个s_ReadFile子程序,就是显示图片的,你拿来稍微改动就可用了。难道让人家喂饭到你嘴里阿。
[/Quote]我不否认2楼的是一种好方法,MSDN中也有这段,我若改用此方法也能实现,但它不符合我的要求。因为我没有引用 Microsoft ActiveX Data Objects ,我用的是Adodc控件,也就是Microsoft ADO Data Control 6.0。这个控件链接到数据库Student.mdb的基本情况表,我若再引用Microsoft ActiveX Data Objects 就会与Adodc发生冲突,那么2楼的代码就无法使用了,但Adodc控件我必须使用。请看清楚帖子的要求再回帖吧。
wap21 2008-12-16
  • 打赏
  • 举报
回复
ding
云水千寻 2008-12-16
  • 打赏
  • 举报
回复
看来大家还是不太明白我的意思。
在Student.mdb的基本情况表的照片字段中,我已经加入了两张图片,并且Adodc1已经与基本情况表建立了连接。
这样,应该不需要再向数据库中写入数据了吧。也就是说,数据库中已经存在了所需数据,不需再写入。
我只需要能够将Image1绑定到“照片”字段的代码,最好能用到GetChunk方法。
最终的运行结果应该是:
一运行程序,Image1中就出现数据库Student.mdb的基本情况表的照片字段中的第一个图片,
当单击adodc1的右箭头时,Image1内就显示第二张图片。

1楼的要用到通用对话框,只是想数据库中写入数据,这个我会。

2楼的代码有些看不懂,而且有些长。我想这是一个小功能,不需要那么多的代码吧。

不管怎样,还是非常感谢各位的帮忙,嘿嘿

tongnaifu 2008-12-16
  • 打赏
  • 举报
回复
好YY的标题
hbwhwc 2008-12-16
  • 打赏
  • 举报
回复
不懂,up
qap22 2008-12-16
  • 打赏
  • 举报
回复
不懂,up
饮水需思源 2008-12-16
  • 打赏
  • 举报
回复
使用流对象保存和显示图片
打开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
zhou_zion 2008-12-16
  • 打赏
  • 举报
回复

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

这是把图片写入数据库的代码
一般不会出现不能绑定的问题,你再重新试一下吧
云水千寻 2008-12-16
  • 打赏
  • 举报
回复
诺大的一个CSDN,咋就没人来帮小弟弟解决问题呢
是不是嫌分少啊,我加分还不成吗

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧