Set iStm = New ADODB.Stream
    With iStm
        .Mode = adModeReadWrite
        .Type = adTypeBinary
        .Open
        .Write iRe(1)
        .SaveToFile App.Path & "\Test.doc"   !!!!!!!!这里提示写入文件失败
End With
是不是在添加控件的时候应该选择链接呀
怎么才能在Call ReadFile的时候在OLE控件中显示文档内容呀
!!!
请勿提供以下URL
http://community.csdn.net/Expert/topic/3031/3031554.xml?temp=.314007
http://community.csdn.net/Expert/topic/3093/3093257.xml?temp=.7691156
我看过了...

解决方案 »

  1.   

    再细点描述一下:
    字段1类型为OLE对象
    OLE控件是以由文件创建的方法设置的,没有钩选链接,也没有钩选显示为图标,
    把文档存入ACCESS库中的过程已经实现(应该是吧,在ACCESS的表中该字段显示的均为“长二进制数据”,是实现了吧?)我现在用来写入和读取文档的OLE控件均为OLE1,请大家帮我看看
      

  2.   

    呵呵
    这个对你应该有用
    http://office.9zp.com/dispbbs.asp?boardID=15&ID=2162
      

  3.   

    我不想用DATA控件操控,直接用语句好吗?
    就照上面的思路,能解决吗?
      

  4.   

    如果SaveToFile App.Path & "\Test.doc" 这个文件存在,则这里提示写入文件失败
    下面的代码我又测试了一下,没有问题
    字段类型是image类型
    '*************************************************************************
    '**
    '** 使用 ADODB.Stream 保存/读取文件到数据库
    '** 引用 Microsoft ActiveX Data Objects 2.5 Library 及以上版本
    '**
    '** ----- 数据库连接字符串模板 ---------------------------------------
    '** ACCESS数据库
    '** iConcStr = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
    '**     ";Data Source=数据库名"
    '**
    '** SQL数据库
    '** iConcStr = "Provider=SQLOLEDB.1;Persist Security Info=True;" & _
    '**     "User ID=用户名;Password=密码;Initial Catalog=数据库名;Data Source=SQL服务器名"
    '**'保存文件到数据库中
    Sub s_SaveFile()
        Dim iStm As ADODB.Stream
        Dim iRe As ADODB.Recordset
        Dim iConcstr As String
        
        '数据库连接字符串
        'iConcStr = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
        '    ";Data Source=F:\csdn_vb\database\保存图片\img.mdb"
        iConcstr = "Provider=SQLOLEDB.1;Persist Security Info=True;" & _
         "User ID=sa;Password=;Initial Catalog=test;Data Source=yang"
        Dim iConc As ADODB.Connection
        Set iConc = New ADODB.Connection
        
        iConc.Open iConcstr
        '读取文件到内容
        Set iStm = New ADODB.Stream
        With iStm
            .Type = adTypeBinary   '二进制模式
            .Open
            .LoadFromFile App.Path + "\com.doc"
        End With
        
        '打开保存文件的表
        Set iRe = New ADODB.Recordset
        With iRe
            .Open "select * from img", iConc, 1, 3
            .AddNew         '新增一条记录
            .Fields("photo") = iStm.Read
            .Update
        End With
        
        '完成后关闭对象
        iRe.Close
        iStm.Close
    End SubSub s_ReadFile()
        Dim iStm As ADODB.Stream
        Dim iRe As ADODB.Recordset
        Dim iConcstr As String
        
        '数据库连接字符串
        'iConc = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
         '   ";Data Source=F:\csdn_vb\database\保存图片\img.mdb"
             iConcstr = "Provider=SQLOLEDB.1;Persist Security Info=True;" & _
         "User ID=sa;Password=;Initial Catalog=test;Data Source=yang"
        Dim iConc As ADODB.Connection
        Set iConc = New ADODB.Connection
        
        iConc.Open iConcstr
        '打开表
        Set iRe = New ADODB.Recordset
        iRe.Open "select * from img", iConc, adOpenKeyset, adLockReadOnly
        iRe.Filter = "id=3"
        
        '保存到文件
        Set iStm = New ADODB.Stream
        With iStm
            .Mode = adModeReadWrite
            .Type = adTypeBinary
            .Open
            .Write iRe("photo")
            .SaveToFile App.Path & "\cc.doc"
        End With
        
            OLE1.SourceDoc =App.Path & "\cc.doc"
            OLE1.Action = 1    'use the old action method
            OLE1.SizeMode = vbOLESizeAuttoSize    '调节对象大小使其正好充满OLE容器控件
        
        '关闭对象
        iRe.Close
        iStm.Close
    End SubPrivate Sub Command1_Click()
    Call s_ReadFile
    End SubPrivate Sub Command2_Click()
    Call s_SaveFile
    End Sub
      

  5.   

    那也就是说,您例子里的com.doc和cc.doc都不是存在的了?
    那OLE控件怎么显示文档的内容呢?
    我指的是,
    我添加的OLE控件设置的是“由文件创建”文档(也就是APP.path下的Test.doc文档,这样不能实现以上的过程吗?应该怎么设置?)
    是不是应该选择“新建”文档
    另外,则么建立一个临时文档呢?
    龙卷风大哥,在教教我吧
      

  6.   

    s_SaveFile()的时候com.doc文件要存在我添加的OLE控件设置的是“由文件创建”文档(也就是APP.path下的Test.doc文档,这样不能实现以上的过程吗?应该怎么设置?)
    直接添加ole控件,选择新建doc文档读取得时候使用
    OLE1.SourceDoc =App.Path & "\cc.doc"
    OLE1.Action = 1    'use the old action method
    OLE1.SizeMode = vbOLESizeAuttoSize    '调节对象大小使其正好充满OLE容器控件
      

  7.   

    再请龙卷风大哥出马!
    在读出文件的时候,出现“文件转换”对话框,
    应该如何在代码中实现将二进制的WORD文档转换成任何版本的WORD都支持的格式?
      

  8.   

    ///////我不想用DATA控件操控,直接用语句好吗?
    就照上面的思路,能解决吗?///////对“DATA控件”有仇啊!用“DATA控件”不用临时文件!
    用“DATA控件”连接SQL也没问题!
    用“DATA控件”可在同一字段保存不同格式文件
    用“DATA控件”可以预览文件(快速)
      

  9.   

    谢谢大头,
    我只是想一种方法一种方法的解决,
    这样到头来什么也学不会,
    先把这个搞定,然后再请教您关于用DATA地用法
      

  10.   

    问题如上:
    在读出文件的时候,出现“文件转换”对话框,
    应该如何在代码中实现将二进制的WORD文档转换成任何版本的WORD都支持的格式?
      

  11.   

    同一版本的没有问题,不同版本的office要兼容,肯定会出现文件转换的
    靠代码实现,可能有难度
      

  12.   

    在zerg2001 (刺蛇)的:
    http://community.csdn.net/Expert/topic/2994/2994390.xml?temp=.6713068
    贴中有提到:
    !!!!!!!!!!!!!!!
    “虽然SAVE后的文件通过WORD不能打开(OLE加了文件头),但是可以被OLE使用就OK吧。”
    !!!!!!!!!!!!!!!
    怎么才能被OLE使用呢?
    怎么我一调用就要提示:“转换文件格式”呢?
    在OLE调用文档之前难道不是要把二进制文档转换之后写入WORD文档然后才能显示在OLE控件里吗?正如Stream.SaveToFile App.Path & "\Test.doc"里所写的要Save呀,
    希望大家都能到这里来讨论讨论,这个问题已经困惑我两天了 
      

  13.   

    把这二句
    OLE1.SourceDoc =App.Path & "\cc.doc"
    OLE1.Action = 1    'use the old action method
    改成如下一句试试
    OLE1.CreateEmbed App.Path & "\cc.doc"
      

  14.   

    是在SaveToFile这里不能实现,都还没到OLE的ACTION呢!
    求求各位大虾了,给初学者一点信心吧....
      

  15.   

    按理说Word一样可以承载RTF格式的文档,
    可是当我把链接文档更改为一个存在的RTF文档时,
    就会出现报错“无法绑定到源”Debug指定到
    !!!!!!!!!!!
    OLE2.Action = 1  '建立链接
    !!!!!!!!!!!
    这一行
      

  16.   

    是在SaveToFile这里不能实现?
    这一步你都没有实现,生成doc都不行?
      

  17.   

    是啊,在生成DOC文件的时候就要求转换格式,我不知道应该转换成什么格式,而且使了许多格式都不行,OLE都不能与其绑定,我不知道是不是在最初把Word文档存入数据库的时候就没实现,刺蛇的帖中提到的:
    “虽然SAVE后的文件通过WORD不能打开(OLE加了文件头),但是可以被OLE使用就OK吧。”
    应该怎么理解呢?
    我是这样测试的:
    数据库:
    access数据库,表1存储Test.doc的字段Type为OLE对象(我系统装的是OfficeXP)
    Form:
    Form中OLE1为由文件创建,即App.path & "\Test.doc"
    OLE2没设置Class和SourceDoc属性,即取消了新建OLE2时弹出的插入对象对话框(InsertObjDlg)
    Code:
    Private Sub s_SaveFile()              '保存文件到数据库中On Error GoTo ErrSave
       
        Dim iStm As ADODB.Stream
        Dim iRe As ADODB.Recordset
        Dim iConcStr As String
        Dim TmpDoc As String
        
        TmpDoc = App.Path & "\Test.doc"
         
        '数据库连接字符串
        iConcStr = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
            ";Data Source=" & App.Path & "\TestBuild.mdb"
        
       
        Open TmpDoc For Binary As #1
        OLE1.SaveToFile 1
        Close #1
        
        
        '读取文件到内容
        Set iStm = New ADODB.Stream
        With iStm
            .Type = adTypeBinary    '二进制模式
            .Open
            .LoadFromFile TmpDoc
        End With
        
        '打开保存文件的表
        Set iRe = New ADODB.Recordset
        With iRe
            .Open "select * from Test", iConcStr, adOpenKeyset, adLockOptimistic
            .AddNew         '新增一条记录
            .Fields(1) = iStm.Read
            .Update
        End With
        
        '完成后关闭对象
        iRe.Close
        iStm.CloseExit SubErrSave:
    MsgBox "存储出错!", vbExclamation, "错误"
        
    End Sub    Private Sub s_ReadFile()                '从数据库中读取数据,保存成文件
     
     On Error GoTo ErrRead
     
        Dim iStm As ADODB.Stream
        Dim iRe As ADODB.Recordset
        Dim iConc As String
        
        
        '数据库连接字符串
        iConc = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
            ";Data Source=" & App.Path & "\TestBuild.mdb"
        
        '打开表
        Set iRe = New ADODB.Recordset
        iRe.Open "select * from Test", iConc, adOpenKeyset, adLockReadOnly
        iRe.Filter = "Question_ID=1"
            '保存到文件
        Set iStm = New ADODB.Stream
        With iStm
            .Mode = adModeReadWrite
            .Type = adTypeBinary
            .Open
            .Write iRe(1)
            .SaveToFile App.Path & "\Result.Doc", adSaveCreateOverWrite
        End With
        
    OLE2.SourceDoc = App.Path & "\Result.Doc"
    OLE2.Action = 1  '建立链接
    OLE2.SizeMode = vbOLESizeAuttoSize    '调节对象大小使其正好充满OLE容器控件
        
        '关闭对象
        iRe.Close
        iStm.Close
    Exit SubErrRead:
    MsgBox "读取出错!", vbExclamation, "错误"End SubPrivate Sub Command1_Click()Call s_SaveFileEnd SubPrivate Sub Command2_Click()Call s_ReadFileEnd Sub
      

  18.   

    form上一个ole控件,插入对象选择新建
    环境winxp+office2000+vbsp6
    保存读取没有问题'** 引用 Microsoft ActiveX Data Objects 2.5 Library 及以上版本
    Dim iConcstr As String
    Dim iConc As ADODB.Connection'保存文件到数据库中
    Sub s_SaveFile()
        Dim iStm As ADODB.Stream
        Dim iRe As ADODB.Recordset
        Dim iConcstr As String
        
        '读取文件到内容
        Set iStm = New ADODB.Stream
        With iStm
            .Type = adTypeBinary   '二进制模式
            .Open
            .LoadFromFile App.Path + "\com.doc"
        End With
        
        '打开保存文件的表
        Set iRe = New ADODB.Recordset
        With iRe
            .Open "select * from img", iConc, 1, 3
            .AddNew         '新增一条记录
            .Fields("photo") = iStm.Read
            .Update
        End With
        
        '完成后关闭对象
        iRe.Close
        iStm.Close
    End SubSub s_ReadFile()
        Dim iStm As ADODB.Stream
        Dim iRe As ADODB.Recordset
        '打开表
        Set iRe = New ADODB.Recordset
        iRe.Open "select * from img", iConc, adOpenKeyset, adLockReadOnly
        iRe.Filter = "id=6"
        
        '保存到文件
        Set iStm = New ADODB.Stream
        With iStm
            .Mode = adModeReadWrite
            .Type = adTypeBinary
            .Open
            .Write iRe("photo")
            .SaveToFile App.Path & "\cc.doc"
        End With
        
            OLE1.SourceDoc = App.Path & "\cc.doc"        OLE1.Action = 1    'use the old action method
            OLE1.SizeMode = vbOLESizeAuttoSize    '调节对象大小使其正好充满OLE容器控件
        
        '关闭对象
        iRe.Close
        iStm.Close
    End SubPrivate Sub Command1_Click()
    Call s_ReadFile
    End SubPrivate Sub Command2_Click()
    Call s_SaveFile
    End SubPrivate Sub Form_Load()
        '数据库连接字符串
        iConcstr = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
            ";Data Source=F:\csdn_vb\database\保存图片\access\img.mdb"    Set iConc = New ADODB.Connection
        iConc.Open iConcstr
    End Sub