高兴啊! 这里人气不足 散散分让、大家精神一下!怎样把文件存入数据库,然后取出阿!

wxyq 2004-06-09 08:24:28
如 EXECL >ACCESS/ORACLE


我想这是个技术问题吧!
哈哈
...全文
166 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
BlueBeer 2004-06-09
  • 打赏
  • 举报
回复
努力接分ing~
jerrycui 2004-06-09
  • 打赏
  • 举报
回复
挺不错的哦!
online 2004-06-09
  • 打赏
  • 举报
回复
http://support.microsoft.com/default.aspx?scid=kb;EN-US;258038

*************************************************************************
'**
'** 使用 ADODB.Stream 保存/读取文件到数据库
'** 引用 Microsoft ActiveX Data Objects 2.5 Library 及以上版本
'**
'** ----- 数据库连接字符串模板 ---------------------------------------
'** ACCESS数据库
'** iConcStr = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
'** ";Data Source=数据库名"
'**
'** SQL数据库
'** iConcStr = "Provider=SQLOLEDB.1;Persist Security Info=True;" & _
'** "User ID=用户名;Password=密码;Initial Catalog=数据库名;Data Source=SQL服务器名"
'**
'*************************************************************************
'
'保存文件到数据库中
Sub s_SaveFile()
Dim iStm As ADODB.Stream
Dim iRe As ADODB.Recordset
Dim iConcStr As String

'数据库连接字符串
iConcStr = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
";Data Source=F:\My Documents\客户资料1.mdb"

'读取文件到内容
Set iStm = New ADODB.Stream
With iStm
.Type = adTypeBinary '二进制模式
.Open
.LoadFromFile "c:\test.doc"
End With

'打开保存文件的表
Set iRe = New ADODB.Recordset
With iRe
.Open "表", iConc, adOpenKeyset, adLockOptimistic
.AddNew '新增一条记录
.Fields("保存文件内容的字段") = iStm.Read
.Update
End With

'完成后关闭对象
iRe.Close
iStm.Close
End Sub

'从数据库中读取数据,保存成文件
Sub s_ReadFile()
Dim iStm As ADODB.Stream
Dim iRe As ADODB.Recordset
Dim iConc As String

'数据库连接字符串
iConc = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
";Data Source=\\xz\c$\Inetpub\zj\zj\zj.mdb"

'打开表
Set iRe = New ADODB.Recordset
iRe.Open "tb_img", iConc, adOpenKeyset, adLockReadOnly
iRe.Filter = "id=64"

'保存到文件
Set iStm = New ADODB.Stream
With iStm
.Mode = adModeReadWrite
.Type = adTypeBinary
.Open
.Write iRe("img")
.SaveToFile "c:\test.doc"
End With

'关闭对象
iRe.Close
iStm.Close
End Sub

recollectpainer 2004-06-09
  • 打赏
  • 举报
回复
先接分
Baalwhat 2004-06-09
  • 打赏
  • 举报
回复
好想程序里都有点问题啊
didishu0807 2004-06-09
  • 打赏
  • 举报
回复
up
liyan010 2004-06-09
  • 打赏
  • 举报
回复
接分先~
newplayer1 2004-06-09
  • 打赏
  • 举报
回复
很简单,使用OCI接口,其中有函数 OCILobWrite OCILobRead 直接操作数据库,任何文件,都可以进行读写,只要建立一个BLOB字段,用来存储文件就可,注意文件大小限制在2G
yoki 2004-06-09
  • 打赏
  • 举报
回复
完整的代码如下:如果是用SQL那么保存文件的字段类型应该是Binary。如果是用Access,那么保存文件(包括图片)的字段应该用OLE对象,在表中显示为长二进制数据。

'将任何文件从数据库中下载到本地:
Public Function LoadFile(ByVal col As ADODB.Field, ByVal FileName As String) As Boolean '获得binary数据
On Error GoTo myerr:
Dim arrBytes() As Byte
Dim FreeFileNumber As Integer
lngsize = col.ActualSize
arrBytes = col.GetChunk(lngsize)
FreeFileNumber = FreeFile
Open FileName For Binary Access Write As #FreeFileNumber
Put #FreeFileNumber, , arrBytes
Close #FreeFileNumber
LoadFile = True
myerr:
If Err.Number <> 0 Then
LoadFile = False
Err.Clear
End If
End Function

'将文件从本地上传到数据库中
Public Function UpLoadFile(ByVal FileName, ByVal col As ADODB.Field) As Boolean
On Error GoTo myerr:
Dim arrBytes() As Byte
Dim FreeFileNumber As Integer
FreeFileNumber = FreeFile
Open FileName For Binary As #FreeFileNumber
n = LOF(FreeFileNumber)
ReDim arrBytes(1 To n) As Byte
Get #FreeFileNumber, , arrBytes
Close #FreeFileNumber
col.AppendChunk (arrBytes)
UpLoadFile = True
myerr:
If Err.Number <> 0 Then
UpLoadFile = False
Err.Clear
End If
End Function
============================
wumy_ld 2004-06-09
  • 打赏
  • 举报
回复
注意:上面的rsTemp.Update是必须的,因为
WriteToDB rsTemp("Photo"), strFileName
只是把文件保存到了记录集中,需要更新到数据库。
射天狼 2004-06-09
  • 打赏
  • 举报
回复
ACCESS数据库字段类型是OLE类型,其他数据库是大的二进制对象就可以

Option Explicit

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Dim cn As New ADODB.Connection, rs As New ADODB.Recordset

'保存
Private Sub Command1_Click()
Dim bteContent() As Byte

Open "C:\aa.xls" For Binary Access Read As #1
bteContent = InputB(LOF(1), #1)
Close #1

If rs.State = adStateOpen Then rs.Close
rs.Open "select * from tablename", cn, adOpenDynamic, adLockPessimistic
rs.AddNew
rs!Name = "张三"
rs!AGE = 22
rs!SEX = "男"
rs.Fields("EXCEL").AppendChunk bteContent
rs.Update

Erase bteContent
End Sub

'打开
Private Sub Command2_Click()
Dim bteContent() As Byte
If rs.State = adStateOpen Then rs.Close
rs.Open "select * from tablename", cn, adOpenForwardOnly, adLockReadOnly
bteContent = rs.Fields("EXCEL").GetChunk(rs.Fields("PHOTO").ActualSize)

Open "C:\aa.xls" For Binary Access Write As #1
Put #1, , bteContent
Close #1
ShellExecute Me.hwnd, "open", "C:\aa.xls", vbNullString, vbNullString, 1
End Sub

Private Sub Form_Load()
On Error GoTo Errhandle
cn.ConnectionString = "Driver={SQL Server};SERVER=DataServer;DATABASE=zxzx;UID=information;PWD=information*&#"
cn.Open

Exit Sub
Errhandle:
MsgBox Err.Description, vbExclamation
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
On Error Resume Next
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
wumy_ld 2004-06-09
  • 打赏
  • 举报
回复
readdb示例:
strSQL = "select ..."
Set rsTemp = New ADODB.Recordset
rsTemp.Open strSQL, gstrConString, adOpenKeyset, adLockOptimistic

strImgFile = Environ("TEMP") & "\ReportTemp.jpg"
If Dir(strImgFile) <> "" Then Kill strImgFile
If Not IsNull(rsTemp("Photo")) Then
ReadDB rsTemp("Photo"), strImgFile
Set picAuto.Picture = LoadPicture(strImgFile)
End If

writetodb示例:
Set con = New ADODB.Connection
' con.CursorLocation = adUseClient'加上这句无法更新记录
con.ConnectionString = gstrConString
con.Open

Set rsTemp = New ADODB.Recordset
rsTemp.Open strSQL, con, adOpenKeyset, adLockOptimistic
WriteToDB rsTemp("Photo"), strFileName
rsTemp.Update
rsTemp.Close
con.Close
Set rsTemp = Nothing
Set con = Nothing
ryuginka 2004-06-09
  • 打赏
  • 举报
回复
使用OLE类型
wumy_ld 2004-06-09
  • 打赏
  • 举报
回复
如果是access,用ole字段保存;如果是sql server,用image类型字段保存;oracle里面,用blob字段保存。
以下是操作这些字段的代码:
'存储文件到数据库
Public Function WriteToDB(ByRef col As ADODB.Field, ByVal FileName As String) As Boolean
On Error GoTo ErrMsg
Dim mStream As ADODB.Stream
Set mStream = New ADODB.Stream

WriteToDB = False
mStream.Type = adTypeBinary
mStream.Open
mStream.LoadFromFile FileName
col.Value = mStream.Read

mStream.Close
Set mStream = Nothing
WriteToDB = True
Exit Function
ErrMsg:
MsgBox "存储文件到数据库时出现错误." & vbCrLf & Err.Description, vbExclamation + vbOKOnly, "提示"
End Function

'设置临时文件
Public Function ReadDB(col As ADODB.Field, ByRef imgFile As String) As Boolean
On Error GoTo ErrRead
Dim mStream As New ADODB.Stream
ReadDB = False

If col.ActualSize < 200 Then Exit Function

mStream.Type = adTypeBinary
mStream.Open
mStream.Write col.Value
mStream.SaveToFile imgFile, adSaveCreateOverWrite
ReadDB = True
Exit Function
ErrRead:
MsgBox "设置临时文件时出现错误:" & vbCrLf & Err.Description, vbInformation, "提示"
ReadDB = False
End Function
weaest 2004-06-09
  • 打赏
  • 举报
回复
使用OLE类型就可以了吧
wxyq 2004-06-09
  • 打赏
  • 举报
回复
人气不足 散分也
没有人要阿?
RUKYO 2004-06-09
  • 打赏
  • 举报
回复
呵呵,都说了,只有接点Fun了

7,764

社区成员

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

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