1.选择一张图片. 2.读到PICTUREBOX中. 3.将PICTUREBOX的内容放到剪切板中. 4.在RTF控件中发送CTRL+C即可. 5.将RTF的内容保存为RTF格式..然后,参考下面程序:'/以流放问数据库中的二进制字段时的读/写标志 Public Enum SmRsType RsWrite = 1 RsRead = 2 End Enum' '读写二进制数据(流) '函数名:AdoStream '参数: M_Conn ADODB连接,TabName 目标数据表,FldName 目标字段,WhereStr 更新条件, ' FileName 源文件名或由流生成的文件名,RsStyle 记录集的操作类型.W:File to Recode,R:Recode to File '返回值: '例: CALL AdoStream(P_Cnn,"AchGoods","GdsPhoto","Where gdsid='001'","C:\Tmp.Bmp","W")Public Function AdoStream(M_Conn As ADODB.Connection, _ TabName As String, _ FldName As String, _ Optional WhereStr As String = "", _ Optional Filename As String, _ Optional RsStyle As SmRsType = RsWrite) As String
Dim StrSql As String Dim TmpFileName As String Dim Rs As New ADODB.Recordset Dim AdoSem As New ADODB.Stream Dim ReturnVal As String Dim WorkPath As String Dim RsType As Long Dim RsStyleStr As String
On Error Resume Next
WorkPath = App.Path If Right$(WorkPath, 1) <> "\" Then WorkPath = WorkPath & "\" ReturnVal = "" AdoSem.Type = adTypeBinary '流数据类型 AdoSem.Open '打开流 '/----------------------------------------------------------- '将流写入记录集 RsType = RsStyle RsStyleStr = Choose(RsType, "W", "R") If RsStyleStr = "W" Then If Left$(Trim$(UCase$(WhereStr)), Len("where")) <> UCase$("where") Then WhereStr = " Where " & Trim$(WhereStr) StrSql = "Select Top 1 [" & TabName & "].[" & FldName & "] From [" & TabName & "] " & WhereStr Set Rs = RsOpen(M_Conn, StrSql, False) '连接式记录集 If Not (Rs.EOF And Rs.BOF) Then Rs.MoveFirst AdoSem.LoadFromFile Filename '将文件LOAD到流 DoEvents Rs.Fields(FldName).AppendChunk AdoSem.Read Rs.Update End If AdoStream = "" ElseIf RsStyle = "R" Then '/将流从记录集中取出 If Len(Trim$(Filename)) = 0 Then Filename = "TmpFile.Bmp" If Len(Trim$(Dir$(TmpFileName, vbNormal + vbHidden))) > 0 Then Kill Filename If Left$(Trim$(UCase$(WhereStr)), Len("where")) <> UCase$("where") Then WhereStr = " Where " & Trim$(WhereStr)
StrSql = "Select Top 1 [" & TabName & "].[" & FldName & "] From [" & TabName & "] " & WhereStr Set Rs = RsOpen(M_Conn, StrSql) If Not (Rs.EOF And Rs.BOF) Then Rs.MoveFirst If Not (IsNull(Rs.Fields(FldName))) Then TmpFileName = WorkPath & Filename AdoSem.Write Rs.Fields(FldName).GetChunk(Rs.Fields(FldName).ActualSize) DoEvents AdoSem.SaveToFile TmpFileName, IIf(Len(Trim$(Dir$(TmpFileName, vbNormal + vbHidden))) > 0, adSaveCreateOverWrite, adSaveCreateNotExist) AdoStream = TmpFileName Else AdoStream = "" End If Else AdoStream = "" End If End If AdoSem.Close: Set AdoSem = Nothing Rs.Close: Set Rs = Nothing Err.Clear End Function
1.选择一张图片. 2.读到PICTUREBOX中. 3.将PICTUREBOX的内容放到剪切板中. 4.在RTF控件中发送CTRL+C即可. 5.将RTF的内容保存为RTF格式..然后,参考下面程序:'/以流放问数据库中的二进制字段时的读/写标志 Public Enum SmRsType RsWrite = 1 RsRead = 2 End Enum' '读写二进制数据(流) '函数名:AdoStream '参数: M_Conn ADODB连接,TabName 目标数据表,FldName 目标字段,WhereStr 更新条件, ' FileName 源文件名或由流生成的文件名,RsStyle 记录集的操作类型.W:File to Recode,R:Recode to File '返回值: '例: CALL AdoStream(P_Cnn,"AchGoods","GdsPhoto","Where gdsid='001'","C:\Tmp.Bmp","W")Public Function AdoStream(M_Conn As ADODB.Connection, _ TabName As String, _ FldName As String, _ Optional WhereStr As String = "", _ Optional Filename As String, _ Optional RsStyle As SmRsType = RsWrite) As String
Dim StrSql As String Dim TmpFileName As String Dim Rs As New ADODB.Recordset Dim AdoSem As New ADODB.Stream Dim ReturnVal As String Dim WorkPath As String Dim RsType As Long Dim RsStyleStr As String
On Error Resume Next
WorkPath = App.Path If Right$(WorkPath, 1) <> "\" Then WorkPath = WorkPath & "\" ReturnVal = "" AdoSem.Type = adTypeBinary '流数据类型 AdoSem.Open '打开流 '/----------------------------------------------------------- '将流写入记录集 RsType = RsStyle RsStyleStr = Choose(RsType, "W", "R") If RsStyleStr = "W" Then If Left$(Trim$(UCase$(WhereStr)), Len("where")) <> UCase$("where") Then WhereStr = " Where " & Trim$(WhereStr) StrSql = "Select Top 1 [" & TabName & "].[" & FldName & "] From [" & TabName & "] " & WhereStr Set Rs = RsOpen(M_Conn, StrSql, False) '连接式记录集 If Not (Rs.EOF And Rs.BOF) Then Rs.MoveFirst AdoSem.LoadFromFile Filename '将文件LOAD到流 DoEvents Rs.Fields(FldName).AppendChunk AdoSem.Read Rs.Update End If AdoStream = "" ElseIf RsStyle = "R" Then '/将流从记录集中取出 If Len(Trim$(Filename)) = 0 Then Filename = "TmpFile.Bmp" If Len(Trim$(Dir$(TmpFileName, vbNormal + vbHidden))) > 0 Then Kill Filename If Left$(Trim$(UCase$(WhereStr)), Len("where")) <> UCase$("where") Then WhereStr = " Where " & Trim$(WhereStr)
StrSql = "Select Top 1 [" & TabName & "].[" & FldName & "] From [" & TabName & "] " & WhereStr Set Rs = RsOpen(M_Conn, StrSql) If Not (Rs.EOF And Rs.BOF) Then Rs.MoveFirst If Not (IsNull(Rs.Fields(FldName))) Then TmpFileName = WorkPath & Filename AdoSem.Write Rs.Fields(FldName).GetChunk(Rs.Fields(FldName).ActualSize) DoEvents AdoSem.SaveToFile TmpFileName, IIf(Len(Trim$(Dir$(TmpFileName, vbNormal + vbHidden))) > 0, adSaveCreateOverWrite, adSaveCreateNotExist) AdoStream = TmpFileName Else AdoStream = "" End If Else AdoStream = "" End If End If AdoSem.Close: Set AdoSem = Nothing Rs.Close: Set Rs = Nothing Err.Clear End Function
2.读到PICTUREBOX中.
3.将PICTUREBOX的内容放到剪切板中.
4.在RTF控件中发送CTRL+C即可.
5.将RTF的内容保存为RTF格式..然后,参考下面程序:'/以流放问数据库中的二进制字段时的读/写标志
Public Enum SmRsType
RsWrite = 1
RsRead = 2
End Enum'
'读写二进制数据(流)
'函数名:AdoStream
'参数: M_Conn ADODB连接,TabName 目标数据表,FldName 目标字段,WhereStr 更新条件,
' FileName 源文件名或由流生成的文件名,RsStyle 记录集的操作类型.W:File to Recode,R:Recode to File
'返回值:
'例: CALL AdoStream(P_Cnn,"AchGoods","GdsPhoto","Where gdsid='001'","C:\Tmp.Bmp","W")Public Function AdoStream(M_Conn As ADODB.Connection, _
TabName As String, _
FldName As String, _
Optional WhereStr As String = "", _
Optional Filename As String, _
Optional RsStyle As SmRsType = RsWrite) As String
Dim StrSql As String
Dim TmpFileName As String
Dim Rs As New ADODB.Recordset
Dim AdoSem As New ADODB.Stream
Dim ReturnVal As String
Dim WorkPath As String
Dim RsType As Long
Dim RsStyleStr As String
On Error Resume Next
WorkPath = App.Path
If Right$(WorkPath, 1) <> "\" Then WorkPath = WorkPath & "\"
ReturnVal = ""
AdoSem.Type = adTypeBinary '流数据类型
AdoSem.Open '打开流
'/-----------------------------------------------------------
'将流写入记录集
RsType = RsStyle
RsStyleStr = Choose(RsType, "W", "R")
If RsStyleStr = "W" Then
If Left$(Trim$(UCase$(WhereStr)), Len("where")) <> UCase$("where") Then WhereStr = " Where " & Trim$(WhereStr)
StrSql = "Select Top 1 [" & TabName & "].[" & FldName & "] From [" & TabName & "] " & WhereStr
Set Rs = RsOpen(M_Conn, StrSql, False) '连接式记录集
If Not (Rs.EOF And Rs.BOF) Then
Rs.MoveFirst
AdoSem.LoadFromFile Filename '将文件LOAD到流
DoEvents
Rs.Fields(FldName).AppendChunk AdoSem.Read
Rs.Update
End If
AdoStream = ""
ElseIf RsStyle = "R" Then
'/将流从记录集中取出
If Len(Trim$(Filename)) = 0 Then Filename = "TmpFile.Bmp"
If Len(Trim$(Dir$(TmpFileName, vbNormal + vbHidden))) > 0 Then Kill Filename
If Left$(Trim$(UCase$(WhereStr)), Len("where")) <> UCase$("where") Then WhereStr = " Where " & Trim$(WhereStr)
StrSql = "Select Top 1 [" & TabName & "].[" & FldName & "] From [" & TabName & "] " & WhereStr
Set Rs = RsOpen(M_Conn, StrSql)
If Not (Rs.EOF And Rs.BOF) Then
Rs.MoveFirst
If Not (IsNull(Rs.Fields(FldName))) Then
TmpFileName = WorkPath & Filename
AdoSem.Write Rs.Fields(FldName).GetChunk(Rs.Fields(FldName).ActualSize)
DoEvents
AdoSem.SaveToFile TmpFileName, IIf(Len(Trim$(Dir$(TmpFileName, vbNormal + vbHidden))) > 0, adSaveCreateOverWrite, adSaveCreateNotExist)
AdoStream = TmpFileName
Else
AdoStream = ""
End If
Else
AdoStream = ""
End If
End If
AdoSem.Close: Set AdoSem = Nothing
Rs.Close: Set Rs = Nothing
Err.Clear
End Function
2.读到PICTUREBOX中.
3.将PICTUREBOX的内容放到剪切板中.
4.在RTF控件中发送CTRL+C即可.
5.将RTF的内容保存为RTF格式..然后,参考下面程序:'/以流放问数据库中的二进制字段时的读/写标志
Public Enum SmRsType
RsWrite = 1
RsRead = 2
End Enum'
'读写二进制数据(流)
'函数名:AdoStream
'参数: M_Conn ADODB连接,TabName 目标数据表,FldName 目标字段,WhereStr 更新条件,
' FileName 源文件名或由流生成的文件名,RsStyle 记录集的操作类型.W:File to Recode,R:Recode to File
'返回值:
'例: CALL AdoStream(P_Cnn,"AchGoods","GdsPhoto","Where gdsid='001'","C:\Tmp.Bmp","W")Public Function AdoStream(M_Conn As ADODB.Connection, _
TabName As String, _
FldName As String, _
Optional WhereStr As String = "", _
Optional Filename As String, _
Optional RsStyle As SmRsType = RsWrite) As String
Dim StrSql As String
Dim TmpFileName As String
Dim Rs As New ADODB.Recordset
Dim AdoSem As New ADODB.Stream
Dim ReturnVal As String
Dim WorkPath As String
Dim RsType As Long
Dim RsStyleStr As String
On Error Resume Next
WorkPath = App.Path
If Right$(WorkPath, 1) <> "\" Then WorkPath = WorkPath & "\"
ReturnVal = ""
AdoSem.Type = adTypeBinary '流数据类型
AdoSem.Open '打开流
'/-----------------------------------------------------------
'将流写入记录集
RsType = RsStyle
RsStyleStr = Choose(RsType, "W", "R")
If RsStyleStr = "W" Then
If Left$(Trim$(UCase$(WhereStr)), Len("where")) <> UCase$("where") Then WhereStr = " Where " & Trim$(WhereStr)
StrSql = "Select Top 1 [" & TabName & "].[" & FldName & "] From [" & TabName & "] " & WhereStr
Set Rs = RsOpen(M_Conn, StrSql, False) '连接式记录集
If Not (Rs.EOF And Rs.BOF) Then
Rs.MoveFirst
AdoSem.LoadFromFile Filename '将文件LOAD到流
DoEvents
Rs.Fields(FldName).AppendChunk AdoSem.Read
Rs.Update
End If
AdoStream = ""
ElseIf RsStyle = "R" Then
'/将流从记录集中取出
If Len(Trim$(Filename)) = 0 Then Filename = "TmpFile.Bmp"
If Len(Trim$(Dir$(TmpFileName, vbNormal + vbHidden))) > 0 Then Kill Filename
If Left$(Trim$(UCase$(WhereStr)), Len("where")) <> UCase$("where") Then WhereStr = " Where " & Trim$(WhereStr)
StrSql = "Select Top 1 [" & TabName & "].[" & FldName & "] From [" & TabName & "] " & WhereStr
Set Rs = RsOpen(M_Conn, StrSql)
If Not (Rs.EOF And Rs.BOF) Then
Rs.MoveFirst
If Not (IsNull(Rs.Fields(FldName))) Then
TmpFileName = WorkPath & Filename
AdoSem.Write Rs.Fields(FldName).GetChunk(Rs.Fields(FldName).ActualSize)
DoEvents
AdoSem.SaveToFile TmpFileName, IIf(Len(Trim$(Dir$(TmpFileName, vbNormal + vbHidden))) > 0, adSaveCreateOverWrite, adSaveCreateNotExist)
AdoStream = TmpFileName
Else
AdoStream = ""
End If
Else
AdoStream = ""
End If
End If
AdoSem.Close: Set AdoSem = Nothing
Rs.Close: Set Rs = Nothing
Err.Clear
End Function
(比IWebOffice强大多了!)
可以处理所有Office文档(Word/Excel/Access/画笔/Snapshot),关键是开源,你可以修改后重新编译成自己的控件。
至于保存到数据库的操作就用OLE就行了。
该控件可以到微软官方网站下载!