vb向mysql写入字节流_VB中如何实从数据库中读写二进制图片信息

以下VB代码是用来向数据库中读写图片信息的。函数中的两个参数分别提供数据表中存储图片信息的字段名和要存储的图片的路径信息。在读图片时提供数据表中存储图片信息的字段名参数就可以了,我在做软件时用的是ACCESS数据库,调用形式如下 WriteImage(RS.Fields("photos"), mstrFileName) RS是ADODB.Recordset的记录集对象。程序详细注解如下。

Public Sub WriteImage(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 '定义循环变量

Const BLOCKSIZE = 4096 '每次读写块的大小

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

Public Function ReadImage(blobColumn As ADODB.Field) As String

'取得一个临时性文件

Dim strFileName As String

strFileName = "ImageTmp"

Dim FileNumber      As Integer      '文件号

Dim DataLen             As Long         '文件长度

Dim Chunks              As Long         '数据块数

Dim ChunkAry()      As Byte         '数据块数组

Dim ChunkSize       As Long         '数据块大小

Dim Fragment        As Long         '零碎数据大小

Dim lngI                As Long '计数器

On Error GoTo errHander

ChunkSize = 2048                    '定义块大小为 2K

If IsNull(blobColumn) Then Exit Function

DataLen = blobColumn.ActualSize         '获得图像大小

If DataLen < 8 Then Exit Function   '图像大小小于8字节时认为不是图像信息

FileNumber = FreeFile               '产生随机的文件号

Open strFileName For Binary Access Write As FileNumber     '打开存放图像数据文件

Chunks = DataLen \ ChunkSize        '数据块数

Fragment = DataLen Mod ChunkSize    '零碎数据

If Fragment > 0 Then            '有零碎数据,则先读该数据

ReDim ChunkAry(Fragment - 1)

ChunkAry = blobColumn.GetChunk(Fragment)

Put FileNumber, , ChunkAry      '写入文件

End If

ReDim ChunkAry(ChunkSize - 1)             '为数据块重新开辟空间

For lngI = 1 To Chunks                              '循环读出所有块

ChunkAry = blobColumn.GetChunk(ChunkSize)   '在数据库中连续读数据块

Put FileNumber, , ChunkAry()    '将数据块写入文件中

Next lngI

Close FileNumber            '关闭文件

ReadImage = strFileName '把生成的临时图片文件的文件名作为函数的结果返回给调用对象

Exit Function

errHander:

ReadImage = ""

End Function

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值