'读取数据库中的Word文档
Private Sub cmdRead_Click()
Dim Sql As String
Sql = "select word from tb_word where id=1"
Set rs = New ADODB.Recordset
rs.Open Sql, cn, adOpenKeyset, adLockOptimistic
If Dir(App.Path & "\TempTest.doc") <> "" Then
Kill App.Path & "\TempTest.doc"
End If
Set StmWord = New ADODB.Stream
With StmWord
.Mode = adModeReadWrite
.Type = adTypeBinary
.Open
.Write rs!Word
.SaveToFile App.Path & "\TempTest.doc"
.Close
End With
Call OpenWord(App.Path & "\TempTest.doc")
rs.Close
End Sub
'** 数据库使用 ADODB.Stream 保存/读取Word文档的示例代码
'** 引用 Microsoft ActiveX Data Objects 2.5 Library 及以上版本
'** 引用 Microsoft Word 9.0 Objects Library
'** 保存Word文档的字段为word(Access数据库为OLE对象,SQL数据库为二进制数据类型)
Option Explicit
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim StmWord As ADODB.Stream
'调用WORD函数
Sub OpenWord(FileName As String)
Dim WordTemps As New Word.Application
WordTemps.Documents.Add FileName, False
WordTemps.Visible = True
End Sub
'窗体载入时连接数据库
Private Sub Form_Load()
Set cn = New ADODB.Connection
cn.Open "Provider = SQLOLEDB.1;Persist Security Info = False;" & _
"User ID = sa;Password = abc;Data Source = SERVER;" & _
"Initial Catalog = youDB"
End Sub
'将Wowd文档保存到数据库
Private Sub cmdSave_Click()
Set rs = New ADODB.Recordset
rs.Open "select * from TableName", _
cn, adOpenKeyset, adLockOptimistic
Set StmWord = New ADODB.Stream
With StmWord
.Type = adTypeBinary
.Open
.LoadFromFile "F:\My Documents\test.doc"
End With
rs.AddNew
rs.Fields("word").Value = StmWord.Read
rs.Update
StmWord.Close
rs.Close
End Sub
'读取数据库中的Word文档
Private Sub cmdRead_Click()
Dim Sql As String
Sql = "select * from TableName where id=3"
Set rs = New ADODB.Recordset
rs.Open Sql, cn, adOpenKeyset, adLockOptimistic
Set StmWord = New ADODB.Stream
With StmWord
.Mode = adModeReadWrite
.Type = adTypeBinary
.Open
.Write rs!Word
.SaveToFile App.Path & "\TempTest.doc"
.Close
End With
Call OpenWord(App.Path & "\TempTest.doc")
rs.Close
End Sub
存,取就刚好反过来
Public Function FileToDatabase(ByVal vDataField As ADODB.Field, ByVal vFileName As String)
Dim fnum As Long, bytesleft As Long, bytes As Long
Dim lSumSize As Long, lNowSize As Long
Dim tmp() As Byte
On Error GoTo ErrHandle
fnum = FreeFile
Open vFileName For Binary As fnum
bytesleft = LOF(fnum)
lSumSize = CLng(bytesleft / 8192)
Do While bytesleft
bytes = bytesleft
If bytes > 8192 Then bytes = 8192
ReDim tmp(1 To bytes) As Byte
Get #fnum, , tmp
vDataField.AppendChunk tmp
bytesleft = bytesleft - bytes
lNowSize = lNowSize + 1
Loop
Close #fnum
Exit Function
ErrHandle:
MsgBox err.Description
err.Clear
End Function