'** 引用 Microsoft ActiveX Data Objects 2.5 Library 及以上版本
'** 引用 Microsoft Word 9.0 Objects Library
'** 保存Word文档的字段为word(Access数据库为OLE对象,SQL数据库为image)
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=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & App.Path & "\db1.mdb;" & _
"Persist Security Info=False"
'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 tb_word", _
cn, adOpenKeyset, adLockOptimistic
Set StmWord = New ADODB.Stream
With StmWord
.Type = adTypeBinary
.Open
.LoadFromFile "E:\jsjlt.doc"
End With
rs.AddNew
rs.Fields("word") = StmWord.Read
rs.Update
StmWord.Close
rs.Close
End Sub
'读取数据库中的Word文档
Private Sub cmdRead_Click()
Dim Sql As String
Sql = "select * from tb_word where word_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
'SQL数据库的连接字符串
iConcStr = "Provider=SQLOLEDB.1;Persist Security Info=True;" & _
"User ID=用户名;Password=密码;Initial Catalog=数据库名;Data Source=SQL服务器名"
'读取文件到内容
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
Dim Constr As String 'ODBC路径
Dim FileName As String '图片文件名
Const BLOCKSIZE = 4096 '每次读写块的大小
Dim ADOCon As New ADODB.Connection 'ADODB Connection对象
Dim adorst As New ADODB.Recordset 'ADODB Recordset 对象
Dim ADOFld As ADODB.Field 'ADODB Field 对象
Private Sub Form_Load()
Constr = "DSN=image" '定义ODBC连接
ADOCon.Open Constr '创建一个连接
Set adorst = ADOCon.Execute("select fileno,content from wj where id=6")
'ADORst.Open "WJ", ADOCon, adOpenDynamic, adLockOptimistic
'打开一个ADO动态集 表名为table
'Set AdoCtr.Recordset = ADORst '将动态集赋给ADO控件
If Not adorst.EOF Then
Text1.Text = adorst("fileno")
Set ADOFld = adorst("content")
dbTofile ADOFld, "d:\" & adorst("fileno") & ".doc"
End If
End Sub
Private Sub dbTofile(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 '定义循环变量
SourceFile = FreeFile
Open DiskFile For Binary Access Write As SourceFile
ReDim byteData(Fld.ActualSize)
byteData = Fld.GetChunk(Fld.ActualSize)
Put #SourceFile, , byteData()
Close #SourceFile
End
NumBlocks = Fld.ActualSize \ BLOCKSIZE
LeftOver = Fld.ActualSize Mod BLOCKSIZE
For i = 1 To NumBlocks
byteData = Fld.GetChunk(BLOCKSIZE)
Put #SourceFile, , byteData()
Next
ReDim byteData(LeftOver)
byteData = Fld.GetChunk(LeftOver)
Put #SourceFile, , byteData()
Close #SourceFile