哪位大侠知道VB+ADO+Oracle操作图片或者文件存取?谢谢!
新手在编程时遇到VB+ADO+Oracle操作图片或者文件存取问题,用long raw或者lob字段,请哪位老大详细赐教? 问题点数:50、回复次数:5Top
1 楼echo20003(水哥)回复于 2003-09-04 17:49:25 得分 50
可以参考下面的代码:
'*********************************************************************
'**
'**程序类别:模块
'**功能描述:定义将图片保存到数据库和从数据库中取出图片的函数
'**修改日期:
'**
'*********************************************************************
'---------------------------------------------------------------------
'系统中使用的一些常数的定义
'---------------------------------------------------------------------
Private Const BLOCKSIZE = 4096 '每次读写块的大小
'将图片保存到数据库中
Public Function SavePicToDB(ByRef ADOFeild As ADODB.Field, PicFullName As String) As Boolean
Dim SourceFile As Long '定义读取图片时使用的文件号
Dim FileLength As Long '标识文件长度
Dim NumBlocks As Long '文件定义的块数量
Dim bytDataBlocks() As Byte '定义数据块数组
Dim LeftOver As Long '文件被分块后剩余的字节数
Dim i As Long '定义循环中使用的变量
On Error GoTo ErrHandle
'-----------------------------------------------------------------
'获取一个尚未使用的文件号
'-----------------------------------------------------------------
SourceFile = FreeFile
'-----------------------------------------------------------------
'打开以二进制的方式图片文件
'-----------------------------------------------------------------
Open PicFullName For Binary Access Read As #SourceFile
'-----------------------------------------------------------------
'获取打开的图片文件的长度(字节)
'-----------------------------------------------------------------
FileLength = LOF(SourceFile)
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
'判断文件是否存在,0---不存在或无效;其他---存在
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
If FileLength = 0 Then '不存在...
Close #SourceFile
SavePicToDB = False
Else
'-------------------------------------------------------------
'对文件按预定的块的大小进行分割
'-------------------------------------------------------------
NumBlocks = FileLength \ BLOCKSIZE '文件分割的块的数量
LeftOver = FileLength Mod BLOCKSIZE '文件分割后剩余的
'-------------------------------------------------------------
'初始化字段中的内容---清空当前记录中本字段的内容
'-------------------------------------------------------------
ADOFeild.value = Null
'-------------------------------------------------------------
'重新定义数据块的大小
'-------------------------------------------------------------
ReDim bytDataBlocks(BLOCKSIZE)
'-------------------------------------------------------------
'将图片各块的内容写入数据库相应字段
'-------------------------------------------------------------
For i = 1 To NumBlocks
Get #SourceFile, , bytDataBlocks()
ADOFeild.AppendChunk bytDataBlocks()
Next
If LeftOver > 0 Then
'-------------------------------------------------------------
'重新定义数据块的大小
'-------------------------------------------------------------
ReDim bytDataBlocks(LeftOver)
'-------------------------------------------------------------
'将图片剩余字节的内容写入数据库相应字段
'-------------------------------------------------------------
Get #SourceFile, , bytDataBlocks()
ADOFeild.AppendChunk bytDataBlocks()
End If
Close #SourceFile
End If
SavePicToDB = True
Exit Function
ErrHandle:
Close #SourceFile
SavePicToDB = False
End Function
'从数据库中读取图片
Public Function GetPicFromDB(ByRef ADOFeild As ADODB.Field, PicFullName As String) As Boolean
Dim SourceFile As Long '定义读取图片时使用的文件号
Dim FileLength As Long '标识文件长度
Dim NumBlocks As Long '文件定义的块数量
Dim bytDataBlocks() As Byte '定义数据块数组
Dim LeftOver As Long '文件被分块后剩余的字节数
Dim i As Long '定义循环中使用的变量
On Error GoTo ErrHandle
If IsNull(ADOFeild) Then
GetPicFromDB = False
Exit Function
End If
'-----------------------------------------------------------------
'获取数据库中存贮的图片的长度(字节)
'-----------------------------------------------------------------
FileLength = LenB(ADOFeild)
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
'判断文件是否存在,0---不存在或无效;其他---存在
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
If FileLength = 0 Then '不存在...
GetPicFromDB = False
Else
'-------------------------------------------------------------
'对文件按预定的块的大小进行分割
'-------------------------------------------------------------
NumBlocks = FileLength \ BLOCKSIZE '文件分割的块的数量
LeftOver = FileLength Mod BLOCKSIZE '文件分割后剩余的
'-------------------------------------------------------------
'获取一个尚未使用的文件号
'-------------------------------------------------------------
SourceFile = FreeFile
'-------------------------------------------------------------
'打开以二进制的方式图片文件(读写模式)
'-------------------------------------------------------------
Open PicFullName For Binary Access Write As #SourceFile
'-------------------------------------------------------------
'将图片从数据库相应字段中读出写入文件中
'-------------------------------------------------------------
For i = 1 To NumBlocks
bytDataBlocks() = ADOFeild.GetChunk(BLOCKSIZE)
Put #SourceFile, , bytDataBlocks()
Next
If LeftOver > 0 Then
'---------------------------------------------------------
'将图片剩余字节的内容写入数据库相应字段
'---------------------------------------------------------
bytDataBlocks() = ADOFeild.GetChunk(LeftOver)
Put #SourceFile, , bytDataBlocks()
End If
Close #SourceFile
End If
GetPicFromDB = True
Exit Function
ErrHandle:
Close #SourceFile
GetPicFromDB = False
End Function
Top
2 楼echo20003(水哥)回复于 2003-09-04 17:53:17 得分 0
可以参考下面的代码:
'*********************************************************************
'**
'**程序类别:模块
'**功能描述:定义将图片保存到数据库和从数据库中取出图片的函数
'**修改日期:
'**
'*********************************************************************
'---------------------------------------------------------------------
'系统中使用的一些常数的定义
'---------------------------------------------------------------------
Private Const BLOCKSIZE = 4096 '每次读写块的大小
'将图片保存到数据库中
Public Function SavePicToDB(ByRef ADOFeild As ADODB.Field, PicFullName As String) As Boolean
Dim SourceFile As Long '定义读取图片时使用的文件号
Dim FileLength As Long '标识文件长度
Dim NumBlocks As Long '文件定义的块数量
Dim bytDataBlocks() As Byte '定义数据块数组
Dim LeftOver As Long '文件被分块后剩余的字节数
Dim i As Long '定义循环中使用的变量
On Error GoTo ErrHandle
'-----------------------------------------------------------------
'获取一个尚未使用的文件号
'-----------------------------------------------------------------
SourceFile = FreeFile
'-----------------------------------------------------------------
'打开以二进制的方式图片文件
'-----------------------------------------------------------------
Open PicFullName For Binary Access Read As #SourceFile
'-----------------------------------------------------------------
'获取打开的图片文件的长度(字节)
'-----------------------------------------------------------------
FileLength = LOF(SourceFile)
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
'判断文件是否存在,0---不存在或无效;其他---存在
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
If FileLength = 0 Then '不存在...
Close #SourceFile
SavePicToDB = False
Else
'-------------------------------------------------------------
'对文件按预定的块的大小进行分割
'-------------------------------------------------------------
NumBlocks = FileLength \ BLOCKSIZE '文件分割的块的数量
LeftOver = FileLength Mod BLOCKSIZE '文件分割后剩余的
'-------------------------------------------------------------
'初始化字段中的内容---清空当前记录中本字段的内容
'-------------------------------------------------------------
ADOFeild.value = Null
'-------------------------------------------------------------
'重新定义数据块的大小
'-------------------------------------------------------------
ReDim bytDataBlocks(BLOCKSIZE)
'-------------------------------------------------------------
'将图片各块的内容写入数据库相应字段
'-------------------------------------------------------------
For i = 1 To NumBlocks
Get #SourceFile, , bytDataBlocks()
ADOFeild.AppendChunk bytDataBlocks()
Next
If LeftOver > 0 Then
'-------------------------------------------------------------
'重新定义数据块的大小
'-------------------------------------------------------------
ReDim bytDataBlocks(LeftOver)
'-------------------------------------------------------------
'将图片剩余字节的内容写入数据库相应字段
'-------------------------------------------------------------
Get #SourceFile, , bytDataBlocks()
ADOFeild.AppendChunk bytDataBlocks()
End If
Close #SourceFile
End If
SavePicToDB = True
Exit Function
ErrHandle:
Close #SourceFile
SavePicToDB = False
End Function
'从数据库中读取图片
Public Function GetPicFromDB(ByRef ADOFeild As ADODB.Field, PicFullName As String) As Boolean
Dim SourceFile As Long '定义读取图片时使用的文件号
Dim FileLength As Long '标识文件长度
Dim NumBlocks As Long '文件定义的块数量
Dim bytDataBlocks() As Byte '定义数据块数组
Dim LeftOver As Long '文件被分块后剩余的字节数
Dim i As Long '定义循环中使用的变量
On Error GoTo ErrHandle
If IsNull(ADOFeild) Then
GetPicFromDB = False
Exit Function
End If
'-----------------------------------------------------------------
'获取数据库中存贮的图片的长度(字节)
'-----------------------------------------------------------------
FileLength = LenB(ADOFeild)
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
'判断文件是否存在,0---不存在或无效;其他---存在
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
If FileLength = 0 Then '不存在...
GetPicFromDB = False
Else
'-------------------------------------------------------------
'对文件按预定的块的大小进行分割
'-------------------------------------------------------------
NumBlocks = FileLength \ BLOCKSIZE '文件分割的块的数量
LeftOver = FileLength Mod BLOCKSIZE '文件分割后剩余的
'-------------------------------------------------------------
'获取一个尚未使用的文件号
'-------------------------------------------------------------
SourceFile = FreeFile
'-------------------------------------------------------------
'打开以二进制的方式图片文件(读写模式)
'-------------------------------------------------------------
Open PicFullName For Binary Access Write As #SourceFile
'-------------------------------------------------------------
'将图片从数据库相应字段中读出写入文件中
'-------------------------------------------------------------
For i = 1 To NumBlocks
bytDataBlocks() = ADOFeild.GetChunk(BLOCKSIZE)
Put #SourceFile, , bytDataBlocks()
Next
If LeftOver > 0 Then
'---------------------------------------------------------
'将图片剩余字节的内容写入数据库相应字段
'---------------------------------------------------------
bytDataBlocks() = ADOFeild.GetChunk(LeftOver)
Put #SourceFile, , bytDataBlocks()
End If
Close #SourceFile
End If
GetPicFromDB = True
Exit Function
ErrHandle:
Close #SourceFile
GetPicFromDB = False
End Function
Top
3 楼chanet(牧师)回复于 2003-09-04 23:03:43 得分 0
AppendChunk 方法
Top
4 楼njpancheng(king)回复于 2003-09-05 14:47:30 得分 0
好的,我试试,谢谢大虾Top
5 楼njpancheng(king)回复于 2003-09-05 15:47:19 得分 0
echo20003兄,函数中的PicFullName怎么赋值,
1。在存图片时,可以从文件框中得到;
2。但在取图片时,文件名怎么等到,还是随便取一个?Top
6 楼echo20003(水哥)回复于 2003-09-06 14:59:57 得分 0
随便取一个Top



