首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

有没有朋友做数据库存储图片的?存放路径好,还是直接存放在SQL里好?解决办法

2012-01-31 
有没有朋友做数据库存储图片的?存放路径好,还是直接存放在SQL里好?我觉得放在SQL数据库里的话是不是以后放

有没有朋友做数据库存储图片的?存放路径好,还是直接存放在SQL里好?
我觉得放在SQL数据库里的话是不是以后放多了会造成访问整个数据库都很慢?

存放路径里面不好管理。

注:图片比较多。不过大多是黑白图片。

[解决办法]
只存放路径的话读取文件时权限不好管理,建议将文件存入数据库,以下为例子:

使用流对象保存和显示图片
打开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

[解决办法]
我倾向于存放路径,因为图片对数据库的增长影响太大了。存入路径后操作稍多一点,比如要删除记录还要kill文件。
[解决办法]
我以前用 ftp 上传下载图片 感觉太麻烦了 很多情况造成图片无法显示
后来放到数据库sql server 因为我的图片一般不大 数据库又不是ACEESS
支持 bmp jpg
[解决办法]
各有利弊,看你的实际情况了
[解决办法]
看你的需求。
图片文件存入数据库之前要用压缩算法压缩一下(例如:zlib.dll)。
[解决办法]
这还真不好说
[解决办法]
目前为止我只存放路径。
------解决方案--------------------


会不会导致其它SQL查询也变的奇慢?
看你用什么数据库。用Access,数据库不能太大( <2gB)。用MySQL或SQLServer你的那点数据量应该不是问题。
[解决办法]
我以前做过一些工程
把图片存到SQL中,只是保存前要判断一下文件大小,大于50K就不可以保存了。
[解决办法]
存放路径最好,这样可以提高数据库的效率
[解决办法]
存储路径好处多些.比如,可以把重复的图片删除,只保留一个图片,这样只需改变记录的内容也就是存储路径就可以了. 如果是存在数据库里,这就绝不可能平平常常地实现了,必须特别的设计表结构,费时费工,还增加了过后维护理解上的障碍.

在日常维护上,能够从硬盘上直接浏览图片文件也肯定具有更好的灵活性.

从实现上看,存储路径也简单,简单的往往是最好的.
[解决办法]
都有利弊的!


看你要避免什么了,找到自己合适的方法
下面是保存图片数据到数据库中
Option Explicit
Dim b As ADODB.Recordset
Dim c As ADODB.Stream
Dim conn As New ADODB.Connection


Private Sub Command1_Click()

conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\1.mdb;Persist Security Info=False "
conn.Execute "create table a (Str longbinary) "
End Sub

Private Sub Command2_Click()
Set b = New ADODB.Recordset
Set c = New ADODB.Stream
c.Mode = adModeReadWrite
c.Type = adTypeBinary
c.Open
c.LoadFromFile "D:\ss.JPG "
b.Open "select * from a ", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\1.mdb;Persist Security Info=False ", adOpenDynamic, adLockOptimistic
b.AddNew
b.Fields.Item(0).Value = c.Read()

b.Update
b.Close
Set b = New ADODB.Recordset
b.Open "select * from a ", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:1.mdb;Persist Security Info=False ", adOpenKeyset, adLockOptimistic
MsgBox b.RecordCount
b.MoveLast
c.Write (b.Fields.Item(0).Value)
c.SaveToFile "d:\aa.JPG ", adSaveCreateOverWrite
Picture1.Picture = LoadPicture( "D:\aa.JPG ")
End Sub

[解决办法]
各有好处啊`
[解决办法]
看你的具体需求。存放路径里面不好管理,图片被删除或被改名或移位获被修改你就惨了。放在数据库就没有此问题,你可以设定权限。唯一的问题是你的harddisk够大。

热点排行