注册 登录
编程论坛 VB6论坛

这段存取图片到数据库的代码可用吗

wjq09 发布于 2016-05-03 22:17, 2531 次点击
http://wenku.baidu.com/link?url=RQKDcBrfwsP-E0nPKJcmZvo2PVKdamp5VJTQUomxMdk60Lj2XyU7iSTb-S1FfwvRl_CMZ-5qo_tTHd-msRJbh0Yu-wrwLlRg9wQRPcqzASS
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2016-5-3 22:20编辑过]

13 回复
#2
风吹过b2016-05-04 09:09
看原理是可行。效率偏低,但对于大图片,这也是没有办法的。
现在关键在于,你用啥数据库?

如果使用 ACCESS ,可以参考:
https://bbs.bccn.net/thread-248470-1-1.html
#3
wjq092016-05-04 10:28
回复 2楼 风吹过b
用的SQL Server2008数据库,但我在运行时总提示实时错误3021应该怎么办
#4
风吹过b2016-05-04 11:49
你引用结果时,判断了是否有记录吗?
这个检查你出错地方的代码,是否有这些判断。

if rs.bof or rs.eof then
无数据了
else
引用数据
end if

或者写成
if not(rs.bof and rs.eof) then
引用数据
else
无数据了
endif

按顺序引用数据时,使用 do 循环 ,到底时,就跳出循环。
-----------------------
百度这个错误的内容:

实时错误'3021',BOF或EOF中有一个是"真",或者当前的记录以被删除
出现此错误是因为:
1.查找的数据库记录为空..可以用 rs.RecordCount 来判断数据是否等于0
2.查找到数据后,用 Del 命令删除记录后,再引用 Fields 后会出现错误.
3.已经用MoveFirst 或用 MovePrevious 命令 移动至数据库开始后再用 MovePrevious 命令.
4.已经用MoveLast 或用 MoveNext 命令 移动至数据库开始后再用 MoveNext 命令.
#5
wjq092016-05-04 15:00
回复 4楼 风吹过b
我完全按照论文里的代码打进去的,如果说我存图片的数据表本身是空的,现在要存也存不进去,这段代码是不是不能用了?或是说论文里的代码有问题?而且我不明白的是往库里写入又不是读记录问什么不能为空
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2016-5-4 15:16编辑过]

#6
风吹过b2016-05-04 15:15
if Adodc1.recordset.bof =true or adodc1.recordset =true then
exit sub
end if

这三行代码抄了吗?
这三行代码就是防止这种情况的。
当没有记录时,取消保存。
#7
wjq092016-05-04 15:18
回复 6楼 风吹过b
我把这三行注释掉了,不然就直接退出过程,后面的代码运行不了,问题是我第一次运行数据表里不可能有数据啊
#8
风吹过b2016-05-04 20:47
那你可以新建记录不?

它这段代码,是仅仅保存图像,你要先自己写一些代码,用来保存用户其他信息,从而达到记录不为空的要求。

#9
wjq092016-05-05 13:57
回复 8楼 风吹过b
我建库表时只设了一列存图片,有什么办法在代码里改动吗

[此贴子已经被作者于2016-5-5 14:01编辑过]

#10
风吹过b2016-05-05 15:02
那你的代码就改成每次都插入新的记录吧。

Adodc1.recordset.addnew

好像命令是这样的,你自己搜索一下。
代替那三行命令就是了。
#11
wjq092016-05-16 17:32
以下是引用风吹过b在2016-5-5 15:02:56的发言:

那你的代码就改成每次都插入新的记录吧。

Adodc1.recordset.addnew

好像命令是这样的,你自己搜索一下。
代替那三行命令就是了。
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录

谢谢,现在增加正常了,但我现在不按控件箭头的时候再按下显示图片按钮时就弹出这个
#12
风吹过b2016-05-16 17:38
是不是对应的这行没有数据造成的?
你判断一下是否存在记录再调用显示命令吧。
读取,仍然加那三行代码进行判断。
#13
焚心劫2016-05-17 08:45
可以设置多行
#14
ZHRXJR2016-05-17 21:25
在ADO中有个对象:Stream,处理图片非常简单:
程序代码:
Dim Mst As New ADODB.Stream

'数据库连接略,根据你自己的数据库设置即可
RS.Open "select * from 数据表", cn, 3, 2
  RS.AddNew
  Mst.Type = adTypeBinary
  Mst.Open    '打开Mst对象
  If Text2.Text <> "" Then Mst.LoadFromFile Text2.Text   'Mst对象将图片内容转换成二进制数据
  'Text2.Text 是硬盘中选择的图片路径+文件名+扩展名
  RS.Fields("图片") = Mst.Read   '将二进制数据存储在数据表的【图片】Image数据类型的字段,Access数据库存储在【OLE 对象】的字段即可。
  RS.Fields("扩展名") = SSR      'SSR是取得的图片的扩展名,含 . 号,例如  .jpg
  '将图片文件的扩展名存储在【扩展名】这个字段
  RS.Update
  Mst.Close
  RS.Close
      MsgBox "图片已经存储到数据库了!"

仅仅九行代码就解决问题了,实际上处理图片的代码仅仅4行。
1