不知道一个数据库是否只能有一个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 错误,估计就没有存进去,然后读流文件时就只能读取正文的,不能读附件的了。高手来帮帮忙啊!!救命的呀!!!

解决方案 »

  1.   

    我读取流文件的程序是:    Set rc = New ADODB.Recordset
        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)
      

  2.   

    Run-time error '-2147467259(80004005)'
    缺少更新或刷新的键列信息。
      

  3.   

    Option ExplicitDim cn As New ADODB.Connection, rs   As New ADODB.Recordset'保存
    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
      

  4.   

    对于要用recordset对象的update功能进行更新的表,如果没有主键,而表中又有重复的记录时,就会产生楼主的这种错误
      

  5.   

    zjcxc真是猛男 看来欧要改名字了
      

  6.   

    我把登记号设为主键后,读取就出现如下错误:run-time error '3001'参数类型不正确,或不在可接受的范围之内,或与其它参数冲突
      

  7.   

    Set rc = New ADODB.Recordset
        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)
      

  8.   

    rc("contant").ActualSize=0哦
    怎么会没有保存到呢?
      

  9.   

    明天在说把,先谢了zjcxc(邹建)
    请继续关注哦!:)