vb与sql图片的存储--------送100

888888888888 2002-08-19 08:08:07
本人现在线等待,先行谢过各路高手!
...全文
83 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
manmanchong 2002-08-20
  • 打赏
  • 举报
回复
存:
Public Sub save_picture()
Dim cnn As New ADODB.Connection, rst As New ADODB.Recordset
Dim bit() As Byte
dim varPath as string '图片的路径

cnn.open "连接数据库的字符串"
sSql = "SELECT * FROM 表 WHERE 关键字='" & 关键值 & "'"
'选出要增加或修改图片记录的记录
rst.Open sSql, cnn, adOpenKeyset, adLockOptimistic

If Not (rst.EOF And rst.BOF) Then
If VarPath = "" Then
' 然后将字节数组的内容写入数据库即可
rst.Fields("图片") = ""
rst.UPDATE
Else
Open VarPath For Binary As #1
ReDim bit(LOF(1)) As Byte
Get 1, 1, bit
Close 1
' 然后将字节数组的内容写入数据库即可
rst.Fields("图片").AppendChunk bit
rst.UPDATE
End If
End If
end sub

取:
Public Sub show_picture()
Dim REC As Recordset
Dim sSql As String
Dim I As Integer
Set REC = New Recordset
Dim bit1() As Byte
Dim sa As String
sSql = "SELECT * FROM 表 WHERE 关键字 ='" & 关键值 & "'"
REC.Open sSql, Conn, adOpenStatic, adLockOptimistic, adCmdText
If REC.EOF Or REC.BOF Then
Exit Sub
Else
Picture1.Picture = Nothing
If REC("图片").ActualSize > 0 Then
bit1 = REC.Fields("图片").GetChunk(REC("图片").ActualSize)
'然后将字节数组的内容拼装成文件即可
Open "c:\1.bmp" For Binary As #1

Put 1, 1, bit1
Close 1
Picture1.Picture = LoadPicture("c:\1.bmp")
kill ("c:\1.bmp")

End If
End If
rec.close
Set REC = Nothing
Exit Sub
Err:
MsgBox "读取图片出错!", OKOnly, "系统提示"
End Sub
duckcn 2002-08-20
  • 打赏
  • 举报
回复
来自msdn的例子

在 ActiveX Data Objects (ADO) 2.5 中引入的 Stream 对象可以用来大大简化编写访问和修改 SQL Server 中的 BLOB 数据的代码。 以前版本的 ADO [ 2.0、2.1 和 2.1 SP2 ] 则需要小心使用 Field 对象的 GetChunk 和 AppendChunk 方法,才能将固定大小的大型数据块中的 BLOB 数据写入 BLOB 列(或从中读取)。 由于 ADO 2.5 的出现,该方法有了可以替代的方案。 本文包含相应的代码示例,这些示例演示了如何使用 Stream 对象来为如下常见任务进行编程:

将存储在 SQL Server Image 列的数据保存到硬盘的文件中。
将 .gif 文件的内容移到 SQL Server 表的 Image 列。



更多信息
下面的代码示例所针对的数据存储在 SQL Server 7.0 pubs 示例数据库的 pub_info 表中。 您需要修改 ADO 连接字符串,使之指向您安装的 SQL Server。

示例 1: 将 SQL Server Image 列中的数据保存到硬盘文件中


该示例代码将打开在 pubs 数据库的 pub_info 表中的记录集,并将存储在第一条记录 logo 列中的二进制图像数据保存到硬盘文件中,如下所示:
新建一个标准 EXE Visual Basic 工程。


在工程菜单上,单击选择引用,然后设置一个到 Microsoft ActiveX Data Objects 2.5 Object Library 的引用。


将 CommandButton 控件放在 Form1 上。


在该窗体的常规声明段中作如下声明:


Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim mstream As ADODB.Stream
将下面的代码剪切并粘贴到添加到该窗体的 CommandButton 所对应的 Click 事件中:


Set cn = New ADODB.Connection
cn.Open "Provider=SQLOLEDB;data Source=<name of your SQL Server>;
Initial Catalog=pubs;User Id=<Your Userid>;Password=<Your Password>"

Set rs = New ADODB.Recordset
rs.Open "Select * from pub_info", cn, adOpenKeyset, adLockOptimistic

Set mstream = New ADODB.Stream
mstream.Type = adTypeBinary
mstream.Open
mstream.Write rs.Fields("logo").Value
mstream.SaveToFile "c:\publogo.gif", adSaveCreateOverWrite

rs.Close
cn.Close
保存并运行该 Visual Basic 工程。


单击 CommandButton,即可将第一条记录的 logo 列所包含的二进制数据保存到文件 c:\publogo.gid 中。请用资源管理器找到并打开该文件,以查看所保存的图像。

该示例中的代码声明了一个 ADODB Stream 对象,并将它的 Type 属性设置为 adTypeBinary,以表示将使用该对象处理二进制数据。 然后,通过调用 Stream 对象的 Write 方法,存储在 pub_info 表第一条记录的 logo 列中的数据被写出到 Stream 对象中。 现在,Stream 对象包含了二进制数据,该二进制数据是通过调用该对象的 SaveToFile 方法并传入文件的路径保存到文件中的。 作为第二个参数被传入的常量 adSaveCreateOverWrite 则导致 SaveToFile 方法覆盖指定的文件(如果它已经存在)。


示例 2: 将以 .gif 文件格式存储的图像传输到 SQL Server 表的 Image 列


该示例代码将通过覆盖 pub_info 表的当前内容,将一个以 .gif 文件格式存储的图像保存到该表的第一条记录中,如下所示:
新建一个标准 EXE Visual Basic 工程。


在工程菜单上,单击选择引用,然后设置一个到 Microsoft ActiveX Data Objects 2.5 Object Library 的引用。


将 CommandButton 按钮放在 Form1 上。


在该窗体的常规声明段中作如下声明:


Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim mstream As ADODB.Stream
将下面的代码剪切并粘贴到添加到该窗体的 CommandButton 所对应的 Click 事件中:


Set cn = New ADODB.Connection
cn.Open "Provider=SQLOLEDB;data Source=<name of your SQL Server>;
Initial Catalog=pubs;User Id=<Your Userid>;Password=<Your Password>"

Set rs = New ADODB.Recordset
rs.Open "Select * from pub_info", cn, adOpenKeyset, adLockOptimistic

Set mstream = New ADODB.Stream
mstream.Type = adTypeBinary
mstream.Open
mstream.LoadFromFile "<path to .gif file>"
rs.Fields("logo").Value = mstream.Read
rs.Update

rs.Close
cn.Close
保存并运行该 Visual Basic 工程。


单击 CommandButton 运行该代码,即可将 .gif 文件的内容以数据流的方式传输到 ADO Stream 对象中,并将 Stream 中的数据保存到记录集内第一条记录的 logo 列。


请使用示例 1 中的代码,确认 logo 列中的图像已被修改。
jwing 2002-08-19
  • 打赏
  • 举报
回复
收藏好!
================================================================

CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!

★ 浏览帖子速度极快![建议系统使用ie5.5以上]。 ★ 多种帖子实现界面。
★ 保存帖子到本地[html格式]★ 监视您关注帖子的回复更新。
★ 可以直接发贴、回复帖子★ 采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录!
★ 支持在线检测程序升级情况,可及时获得程序更新的信息。

★★ 签名 ●
可以在您的每个帖子的后面自动加上一个自己设计的签名哟。

Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
Http://www.ChinaOK.net/csdn/csdn.exe [自解压]

chenyu5188 2002-08-19
  • 打赏
  • 举报
回复
控件不是可以邦定吗…!!!

UP
hfycl 2002-08-19
  • 打赏
  • 举报
回复
帮你UP
golden24kcn 2002-08-19
  • 打赏
  • 举报
回复
你用STREAM对象吧!ADO的,我以前也发过这个类似的贴子,你找找吧,很少的代码,不多于10行的样子,方便得很,当时好像是白菜给我回的!呵呵!
Tome_ming 2002-08-19
  • 打赏
  • 举报
回复
'二进制数据转换为文件形式
'sfilename为一临时文件名。
Public Function BinarytoFile(sFileName As String, fld As ADODB.Field) As Variant
Dim bBuffer() As Byte
Dim nLenLeft As Long
Dim nChunkSize As Long
Dim FileNO As Long
If Len(Dir$(sFileName)) > 0 Then
Close
Kill sFileName
End If
FileNO = FreeFile
Open sFileName For Binary As #FileNO
nChunkSize = 32768
nLenLeft = fld.ActualSize
If nLenLeft = 0 Then
BinarytoFile = Empty
Exit Function
End If
If nLenLeft < nChunkSize Then
nChunkSize = nLenLeft
End If
Do
ReDim bBuffer(nChunkSize - 1)
bBuffer = fld.GetChunk(nChunkSize)
Put #FileNO, , bBuffer
nLenLeft = nLenLeft - nChunkSize
If nLenLeft < nChunkSize Then
nChunkSize = nLenLeft
End If
Loop Until nLenLeft <= 0
Close #FileNO
BinarytoFile = sFileName
End Function

'图形转换成二进制文件。
Public Function FileIoBinary(strfile As String) As Variant

If strfile = "" Then
FileIoBinary = Empty
Exit Function
End If
Open strfile For Binary As #1
ReDim Binfile(FileLen(strfile) - 1)
Get #1, , Binfile
Close #1
FileIoBinary = Binfile
' MsgBox UBound(Binfile)
End Function
'例如:
Image1.Picture = LoadPicture(IIf(IsEmpty(Rsgz("photo")), Empty, BinarytoFile("bmptemp", Rsgz("photo"))))
数据库中“photo”为存储图像字段,好象是image类型。
添加时采用addnew 或
RsPhoto.Fields("photo").AppendChunk FTPhoto
FTPhoto为二进制数据文件。
complus 2002-08-19
  • 打赏
  • 举报
回复
至于读取图片只需将图片字段与图片控件绑订即可。
Set picTmp.DataSource = Rs
picTmp.DataField = "photo"
picTmp是picture box控件
cdimp 2002-08-19
  • 打赏
  • 举报
回复
帮你UP
complus 2002-08-19
  • 打赏
  • 举报
回复
使用:
SavePhoto Rs.Fields("photo"), strPath
complus 2002-08-19
  • 打赏
  • 举报
回复
将图片存入sql中吗?

Private Sub SavePhoto(ByRef fld As ADODB.Field, DiskFile As String)
Dim byteData() As Byte '定义数据块数组
Dim NumBlocks As Long '定义数据块个数
Dim FileLength As Long '标识文件长度
Dim LeftOver As Long '定义剩余字节长度
Dim SourceFile As Long '定义自由文件号
Dim i As Long '定义循环变量
SourceFile = FreeFile '提供一个尚未使用的文件号
Open DiskFile For Binary Access Read As SourceFile '打开文件
FileLength = LOF(SourceFile) '得到文件长度
If FileLength = 0 Then '判断文件是否存在
Close SourceFile
MsgBox DiskFile & " 无内容或不存在!"
Else
NumBlocks = FileLength \ BLOCKSIZE '得到数据块的个数
LeftOver = FileLength Mod BLOCKSIZE '得到剩余字节数
fld.Value = Null
ReDim byteData(BLOCKSIZE) '重新定义数据块的大小
For i = 1 To NumBlocks
Get SourceFile, , byteData() ' 读到内存块中
fld.AppendChunk byteData() '写入FLD
Next i
ReDim byteData(LeftOver) '重新定义数据块的大小
Get SourceFile, , byteData() '读到内存块中
fld.AppendChunk byteData() '写入FLD
Close SourceFile '关闭源文件
End If
End Sub

7,763

社区成员

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

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