怎样将图片插入数据库?

RussellMX 2004-10-26 05:03:10
怎样将图片插入数据库?怎么在数据库中查询到图片吊出来?
...全文
157 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lihonggen0 2004-10-27
  • 打赏
  • 举报
回复
ADODB.Stream必须在ADO2.5以上

低于2.5版本可采用AppendChunk方法
The ADO code is:

Public Sub AppendChunkX()

Dim cn As ADODB.Connection
Dim rstPubInfo As ADODB.Recordset
Dim strCn As String
Dim strPubID As String
Dim strPRInfo As String
Dim lngOffset As Long
Dim lngLogoSize As Long
Dim varLogo As Variant
Dim varChunk As Variant

Const conChunkSize = 100

' Open a connection.
Set cn = New ADODB.Connection
strCn = "Server=srv;Database=pubs;UID=sa;Pwd=;"

cn.Provider = "sqloledb"
cn.Open strCn

'Open the pub_info_x table.
Set rstPubInfo = New ADODB.Recordset
rstPubInfo.CursorType = adOpenDynamic
rstPubInfo.LockType = adLockOptimistic
rstPubInfo.Open "pub_info_x", cn, , , adCmdTable

'Prompt for a logo to copy.
strMsg = "Available logos are : " & vbCr & vbCr

Do While Not rstPubInfo.EOF
strMsg = strMsg & rstPubInfo!pub_id & vbCr & _
Left(rstPubInfo!pr_info,
InStr(rstPubInfo!pr_info, ",") - 1) & vbCr & vbCr
rstPubInfo.MoveNext
Loop

strMsg = strMsg & "Enter the ID of a logo to copy:"
strPubID = InputBox(strMsg)

' Copy the logo to a variable in chunks.
rstPubInfo.Filter = "pub_id = '" & strPubID & "'"
lngLogoSize = rstPubInfo!logo.ActualSize
Do While lngOffset < lngLogoSize
varChunk = rstPubInfo!logo.GetChunk(conChunkSize)
varLogo = varLogo & varChunk
lngOffset = lngOffset + conChunkSize
Loop

' Get data from the user.
strPubID = Trim(InputBox("Enter a new pub ID:"))
strPRInfo = Trim(InputBox("Enter descriptive text:"))

' Add a new record, copying the logo in chunks.
rstPubInfo.AddNew
rstPubInfo!pub_id = strPubID
rstPubInfo!pr_info = strPRInfo
lngOffset = 0 ' Reset offset.

Do While lngOffset < lngLogoSize
varChunk = LeftB(RightB(varLogo, lngLogoSize - _
lngOffset),conChunkSize)
rstPubInfo!logo.AppendChunk varChunk
lngOffset = lngOffset + conChunkSize
Loop

rstPubInfo.Update

' Show the newly added data.
MsgBox "New record: " & rstPubInfo!pub_id & vbCr & _
"Description: " & rstPubInfo!pr_info & vbCr & _
"Logo size: " & rstPubInfo!logo.ActualSize

rstPubInfo.Close
cn.Close

End Sub

lihonggen0 2004-10-27
  • 打赏
  • 举报
回复

VB6向SQL SERVER存取图象:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;258038
guoxu_009 2004-10-27
  • 打赏
  • 举报
回复
建议还是使用在数据库中储存图片的链接地址 然后根据地址来显示图片
见过好多大型软件都是这么做 因为很稳定 也便于操作
===============
偶就是这样做的。:P
cosio 2004-10-27
  • 打赏
  • 举报
回复
楼上,这样子做,只能你本地的机子用这个图片,没有把图片存入数据库,局域网内的机子访问不到这个图片,所以不建议使用这种操作!
superstarchy 2004-10-27
  • 打赏
  • 举报
回复
建议还是使用在数据库中储存图片的链接地址 然后根据地址来显示图片
见过好多大型软件都是这么做 因为很稳定 也便于操作
sys9933 2004-10-27
  • 打赏
  • 举报
回复
给一个绝对没错的!

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 pic", iConc, 1, 3
.AddNew '新增一条记录
.Fields("img") = 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 pic order by id desc", iConc, adOpenKeyset, adLockReadOnly



'保存到文件

Set iStm = New ADODB.Stream

With iStm

.Mode = adModeReadWrite

.Type = adTypeBinary

.Open

.Write iRe("img")

'这里注意了,如果当前目录下存在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()

'下面的语句是连接sqlserver数据库的.

iConcstr = "DSN=pic;UID=sa;PWD=sa;"

Set iConc = New ADODB.Connection

iConc.Open iConcstr




End Sub








Private Sub Form_Unload(Cancel As Integer)

iConc.Close

Set iConc = Nothing

End Sub

vbman2003 2004-10-27
  • 打赏
  • 举报
回复
楼上强,学了一招

收藏 ^_^
vbman2003 2004-10-27
  • 打赏
  • 举报
回复
用什么方法要看具体情况的,没有好坏之分。用户的需求与数据库功能完美结合,就是合理的。
cosio 2004-10-27
  • 打赏
  • 举报
回复
我们要客户机1上录图片,在服务器保存,在客户机2上读出的话,那你说这个不是搞不定了!?
所以要保存入数据库才是好办法啊!
superstarchy 2004-10-27
  • 打赏
  • 举报
回复
如果是局网共同访问的话就应该将图片存入服务器更不能存入数据库了,因为服务器数据库的资源更加珍贵.
cosio 2004-10-26
  • 打赏
  • 举报
回复
用image \picture 用Ado ,贴子很多,自己搜索一下了!
vbman2003 2004-10-26
  • 打赏
  • 举报
回复
使用Stream对象,可以实现对数据库的图像存取。
SQL数据库中存放图像的字段是image, Access为OLE类型。
比如,如果用“CommonDialog”控件来选择你硬盘上的图像文件;
用“Picture”控件来显示图像,那么下面的代码供参考:
(运行VB,选择“工程\引用”命令,引用“Microsoft AetiveX Date 2.5 Library”。已连接数据库,打开了相应的记录集rs)
Dim StmPic As ADODB.Stream
Dim StrPicTemp As String
  ......
  '保存你所选择的图像
  Set StmPic = New ADODB.Stream
StmPic.Type = adTypeBinary '指定流是二进制类型
StmPic.Open           '将数据获取到Stream对象中
StmPic.LoadFromFile (CommonDialog1.FileName) '将选择的图像加载到打开的StmPic中
rs.AddNew
rs.Fields(1).Value = StmPic.Read '从StmPic对象中读取数据
rs.Update
StmPic.Close
  ......
  '读取显示数据库中的图像
  Set StmPic = New ADODB.Stream
StrPicTemp = "c:\temp.tmp" '临时文件,用来保存读出的图片
With StmPic
    .Type = adTypeBinary
    .Open
    .Write rs.Fields(1) '写入数据库中的数据至Stream中
    .SaveToFile StrPicTemp, adSaveCreateOverWrite '将Stream中数据写入临时文件中
    .Close
  End With
  Picture1.Picture = LoadPicture(StrPicTemp) '用Picture控件显示图像
  ......

贴了N遍 ^_^

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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