oracle 里不支持ADO的stream流的方式,不知道是为什么,long raw 是保存原始图象信息,你可以用二进制的方法,把那个字段读到一个数组里面,然后把它写到文件里面去。 function如下,供大家参考。 '********** 功能:从ORACLE 数据库中LONG RAW 读出照片,在当前目录中生成jsytemp.bmp '当然这个函数现在还不太完美 Public Function Readphoto(jsybh As String, conn As ADODB.Connection) As Boolean Dim datafile As Integer, Fl As Long, Chunks As Integer Dim Fragment As Integer, Chunk() As Byte, i As Integer Const ChunkSize As Integer = 16384 Dim lngOffset As Long Dim lngTotalSize As Long Dim strChunk As String Readphoto = False Dim rs As New ADODB.Recordset rs.Open "select * from T_D_JSYPHT where jsybh='" & jsybh & "'", conn, adOpenKeyset, adLockOptimistic If rs.EOF Then MsgBox "数据库里没有此相片的记录,请重新输入" Readphoto = False Exit Function End If datafile = 1 Open App.Path & "\jsytemp.bmp" For Binary Access Write As datafile lngTotalSize = rs!photo.ActualSize If lngTotalSize < 200 Then MsgBox "数据有错误,请与系统管理员联系" Readphoto = False Close datafile Exit Function End If Chunks = lngTotalSize \ ChunkSize Fragment = lngTotalSize Mod ChunkSize ReDim Chunk(ChunkSize) Chunk() = rs(1).GetChunk(ChunkSize) Put datafile, , Chunk() lngOffset = lngOffset + ChunkSize Do While lngOffset < lngTotalSize Chunk() = rs!photo.GetChunk(ChunkSize) Put datafile, , Chunk() lngOffset = lngOffset + ChunkSize Loop Close datafile Readphoto = True Exit Function err: Readphoto = False End Function
function如下,供大家参考。
'********** 功能:从ORACLE 数据库中LONG RAW 读出照片,在当前目录中生成jsytemp.bmp
'当然这个函数现在还不太完美
Public Function Readphoto(jsybh As String, conn As ADODB.Connection) As Boolean
Dim datafile As Integer, Fl As Long, Chunks As Integer
Dim Fragment As Integer, Chunk() As Byte, i As Integer
Const ChunkSize As Integer = 16384
Dim lngOffset As Long
Dim lngTotalSize As Long
Dim strChunk As String
Readphoto = False
Dim rs As New ADODB.Recordset
rs.Open "select * from T_D_JSYPHT where jsybh='" & jsybh & "'", conn, adOpenKeyset, adLockOptimistic
If rs.EOF Then
MsgBox "数据库里没有此相片的记录,请重新输入"
Readphoto = False
Exit Function
End If
datafile = 1
Open App.Path & "\jsytemp.bmp" For Binary Access Write As datafile
lngTotalSize = rs!photo.ActualSize
If lngTotalSize < 200 Then
MsgBox "数据有错误,请与系统管理员联系"
Readphoto = False
Close datafile
Exit Function
End If
Chunks = lngTotalSize \ ChunkSize
Fragment = lngTotalSize Mod ChunkSize
ReDim Chunk(ChunkSize)
Chunk() = rs(1).GetChunk(ChunkSize)
Put datafile, , Chunk()
lngOffset = lngOffset + ChunkSize
Do While lngOffset < lngTotalSize
Chunk() = rs!photo.GetChunk(ChunkSize)
Put datafile, , Chunk()
lngOffset = lngOffset + ChunkSize
Loop
Close datafile
Readphoto = True
Exit Function
err:
Readphoto = False
End Function