不知道一个数据库是否只能有一个image字段啊?我建立了一个数据库,每条记录有3个image字段(1个正文2个附件),过程是先添加一条新记录(保存正文)然后问用户是否保存附件,如果回答是就保存附件。附件路径由对话框给出。程序如下:
Public Sub SWDJ() ’保存正文
Dim MsStream As New ADODB.Stream
Dim Rst As ADODB.RecordsetCall OpenRst(Rst, "swk") ’打开数据库 MsStream.Type = adTypeBinary
MsStream.open
MsStream.LoadFromFile filename_path '"Word文件的存放路径" Rst.AddNew Rst.Fields("djh") = Trim(Text1(0).Text)
Rst.Fields("title") = Trim(Text1(1).Text)
Rst.Fields("docNo") = Trim(Text1(2).Text)
Rst.Fields("ztc") = Trim(Text1(7).Text)
Rst.Fields("cs") = Trim(Text1(8).Text)
Rst.Fields("fwdw") = Trim(Text1(3).Text)
Rst.Fields("fwsj") = Trim(Text1(5).Text)
Rst.Fields("swdw") = Trim(Text1(4).Text)
Rst.Fields("swsj") = Date
Rst.Fields("contant") = MsStream.Read
Rst.Fields("fj1") = Trim(Text1(9).Text)
Rst.Fields("fj2") = Trim(Text1(10).Text) MsStream.Close Rst.Update 'rst为你想要保存到数据库中某个表的记录集 Rst.Close
Set Rst = Nothing
End Sub××××××××××××××××××××××××××××××××Public Sub BCFJ() ’保存附件
Dim fjh As String
Dim FJStream As New ADODB.Stream
Dim Rr As ADODB.Recordset' 设置“CancelError”为 True
CommonDialog1.CancelError = True
'On Error GoTo ErrHandler
' 设置标志
CommonDialog1.Flags = cdlOFNHideReadOnly
' 设置过滤器
CommonDialog1.Filter = "All Files (*.*)|*.*|word Files" & _
"(*.doc)|*.doc|Batch Files (*.bat)|*.bat"
' 指定缺省的过滤器
CommonDialog1.FilterIndex = 2
' 显示“打开”对话框
CommonDialog1.FileName = filename_pathFor i = 1 To 2
CommonDialog1.DialogTitle = "附件" & i & "路径"
CommonDialog1.ShowOpen ' 显示选定文件的名字
fjh = "f" & iCall SetRst(Rr, "select " & FJno & " from " & Tname & " where djh=" & DJno & "") ’读取正文记录选出附件字段If Rr.State = 1 Then
If Rr.RecordCount > 0 Then
FJStream.Type = adTypeBinary
FJStream.open
FJStream.LoadFromFile (CommonDialog1.FileName) '"Word文件的存放路径"
Rr.Fields(FJno)=FJStream.Read
FJStream.Close Rr.Update 'rr为你想要保存到数据库中某个表的记录集
Rr.Close
Set Rr = Nothing
End If
End If
If i = 2 Then
MsgBox "附件数达到最大值,不能继续保存了!", vbInformation + vbOKOnly, "提示"
Else
If MsgBox("继续保存附件吗?", vbQuestion + vbYesNo, "确认!") = vbNo Then
Exit Sub
End If
End If
Next iExit SubErrHandler:
' 用户按了“取消”按钮
Exit Sub
End Sub然后问题就是保存附件的时候说 Rr.Update 错误,估计就没有存进去,然后读流文件时就只能读取正文的,不能读附件的了。高手来帮帮忙啊!!救命的呀!!!
Public Sub SWDJ() ’保存正文
Dim MsStream As New ADODB.Stream
Dim Rst As ADODB.RecordsetCall OpenRst(Rst, "swk") ’打开数据库 MsStream.Type = adTypeBinary
MsStream.open
MsStream.LoadFromFile filename_path '"Word文件的存放路径" Rst.AddNew Rst.Fields("djh") = Trim(Text1(0).Text)
Rst.Fields("title") = Trim(Text1(1).Text)
Rst.Fields("docNo") = Trim(Text1(2).Text)
Rst.Fields("ztc") = Trim(Text1(7).Text)
Rst.Fields("cs") = Trim(Text1(8).Text)
Rst.Fields("fwdw") = Trim(Text1(3).Text)
Rst.Fields("fwsj") = Trim(Text1(5).Text)
Rst.Fields("swdw") = Trim(Text1(4).Text)
Rst.Fields("swsj") = Date
Rst.Fields("contant") = MsStream.Read
Rst.Fields("fj1") = Trim(Text1(9).Text)
Rst.Fields("fj2") = Trim(Text1(10).Text) MsStream.Close Rst.Update 'rst为你想要保存到数据库中某个表的记录集 Rst.Close
Set Rst = Nothing
End Sub××××××××××××××××××××××××××××××××Public Sub BCFJ() ’保存附件
Dim fjh As String
Dim FJStream As New ADODB.Stream
Dim Rr As ADODB.Recordset' 设置“CancelError”为 True
CommonDialog1.CancelError = True
'On Error GoTo ErrHandler
' 设置标志
CommonDialog1.Flags = cdlOFNHideReadOnly
' 设置过滤器
CommonDialog1.Filter = "All Files (*.*)|*.*|word Files" & _
"(*.doc)|*.doc|Batch Files (*.bat)|*.bat"
' 指定缺省的过滤器
CommonDialog1.FilterIndex = 2
' 显示“打开”对话框
CommonDialog1.FileName = filename_pathFor i = 1 To 2
CommonDialog1.DialogTitle = "附件" & i & "路径"
CommonDialog1.ShowOpen ' 显示选定文件的名字
fjh = "f" & iCall SetRst(Rr, "select " & FJno & " from " & Tname & " where djh=" & DJno & "") ’读取正文记录选出附件字段If Rr.State = 1 Then
If Rr.RecordCount > 0 Then
FJStream.Type = adTypeBinary
FJStream.open
FJStream.LoadFromFile (CommonDialog1.FileName) '"Word文件的存放路径"
Rr.Fields(FJno)=FJStream.Read
FJStream.Close Rr.Update 'rr为你想要保存到数据库中某个表的记录集
Rr.Close
Set Rr = Nothing
End If
End If
If i = 2 Then
MsgBox "附件数达到最大值,不能继续保存了!", vbInformation + vbOKOnly, "提示"
Else
If MsgBox("继续保存附件吗?", vbQuestion + vbYesNo, "确认!") = vbNo Then
Exit Sub
End If
End If
Next iExit SubErrHandler:
' 用户按了“取消”按钮
Exit Sub
End Sub然后问题就是保存附件的时候说 Rr.Update 错误,估计就没有存进去,然后读流文件时就只能读取正文的,不能读附件的了。高手来帮帮忙啊!!救命的呀!!!
Call SetRst(rc, "select contant from " & Tname & " where title like '" & Trim(fpSpread1.Value) & "'")
If rc.State = 1 Then
If rc.RecordCount > 0 Then
Set stm = New ADODB.Stream
filename_path = App.Path & "\temp\" & CStr(tt) & ".doc" '临时文件,用来保存读出的文档
With stm
.Type = adTypeBinary
.open
.Write rc("contant")
.SaveToFile filename_path, adSaveCreateOverWrite
.Close
End With
Set stm = Nothing
End If
End If
rc.Close
Set rc = NothingCall openDoc(filename_path)
缺少更新或刷新的键列信息。
Private Sub Command1_Click()
Dim bteContent() As Byte
Open "C:\aa.bmp" 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.bmp" For Binary Access Write As #1
Put #1, , bteContent
Close #1
Image1.Picture = LoadPicture("C:\aa.bmp")
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
Call SetRst(rc, "select contant from " & Tname & " where title like '" & Trim(fpSpread1.Value) & "'")
If rc.State = 1 Then
If rc.RecordCount > 0 Then '加上这句判断,看是否因为没有保存到数据的原因
if rc.("contant").ActualSize>0 Then Set stm = New ADODB.Stream
filename_path = App.Path & "\temp\" & CStr(tt) & ".doc" '临时文件,用来保存读出的文档
With stm
.Type = adTypeBinary
.open
.Write rc("contant")
.SaveToFile filename_path, adSaveCreateOverWrite
.Close
End With
Set stm = Nothing
End If
End If
End If
rc.Close
Set rc = NothingCall openDoc(filename_path)
怎么会没有保存到呢?
请继续关注哦!:)