'存储文件到数据库 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
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
用上面的ReadDB函数就可以把ole字段读到一个临时文件里面: call ReadDB(rsTemp("OLE字段"),"c:\test.word") 之后用shellexecute可以打开该文件。如果知道word的安装路径,可以用shell来打开。 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 Private Const SW_SHOW = 5ShellExecute Me.hWnd, "open", "c:\test.word", vbNullString, vbNullString, SW_SHOW
思路是:从数据库中将数据以二进制流的方式取出来,然后存成DOC文件,再调用WORD打开!!代码如下: Option ExplicitPrivate 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 Private Const SW_SHOW = 5 Dim cn As New ADODB.Connection, rs As New ADODB.Recordset'保存 Private Sub Command1_Click() Dim bteContent() As Byte
Open "C:\aa.DOC" 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("PHOTO").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("PHOTO").GetChunk(rs.Fields("PHOTO").ActualSize) Open "C:\aa.doc" For Binary Access Write As #1 Put #1, , bteContent Close #1 ShellExecute Me.hWnd, "open", "c:\aa.doc", vbNullString, vbNullString, SW_SHOW End SubPrivate 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 SubPrivate 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
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
call ReadDB(rsTemp("OLE字段"),"c:\test.word")
之后用shellexecute可以打开该文件。如果知道word的安装路径,可以用shell来打开。
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
Private Const SW_SHOW = 5ShellExecute Me.hWnd, "open", "c:\test.word", vbNullString, vbNullString, SW_SHOW
Option ExplicitPrivate 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
Private Const SW_SHOW = 5
Dim cn As New ADODB.Connection, rs As New ADODB.Recordset'保存
Private Sub Command1_Click()
Dim bteContent() As Byte
Open "C:\aa.DOC" 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("PHOTO").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("PHOTO").GetChunk(rs.Fields("PHOTO").ActualSize) Open "C:\aa.doc" For Binary Access Write As #1
Put #1, , bteContent
Close #1
ShellExecute Me.hWnd, "open", "c:\aa.doc", vbNullString, vbNullString, SW_SHOW
End SubPrivate 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 SubPrivate 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