我是winxp+acesss2k的平台,我在access建一个数据库,库中有表,表的字段很简单,就是编号和OLE
问题一:网友可以在OLE里插入WORD文档后,然后在表的OLE那个地方会出现“长二进制数据”,可我插入同样的文档之后,那个地方却是“word文档”,请问这是为什么?应该怎样改正,
问题二:当OLE插入那个长二进制数据之后,并出现“长二进制数据”的字样之后,我双击该字段 ,出现“Microsoft Access在Microsoft Access与OLE服务器或activeX控件通讯是出现问题,关闭OLE服务器再在Microsoft Access外部重新启动,然后在Microsoft Access中重新刚才的操作”---我苦笑不得,不知所措!
请问这是为什么?(请注意,这绝对不是盗版的问题)
**********************************************************
问题三:我是winxp+access2k+vb6.0的,我想用代码把access2k中备注型数据的默认属性“必填字段--否,Unicode压缩--是”,改为“必填字段--是,Unicode压缩--否”,把文本型数据的默认属性“必填字段--否,Unicode压缩--是”,改为“必填字段--是,Unicode压缩--否”,把数字型数据的默认属性“必填字段--否”,改为“必填字段--是”,应该怎么写?

解决方案 »

  1.   

    1、虽然同样是OLE字段,但是根据插入方式得不同,存储方式也截然不同的
    插入方式有:手动插入文档、用程序写入二进制流(用ACCESS 自己的二进制流或者直接读取磁盘上文件的二进制流,其结果完全不同的!)
    问题一网友使用了,第二种,但是不知道是哪种二进制流。你却使用了手动插入
    问题二插入二进制流后是绝对不能用OLE服务器来打开的,因为他根本不支持
    问题三使用 ADO /DAO 来完成。
    上述所有的解答在 HTTP://ACCESS911.NET 中以及帮助中全都有关于此主题请参考:
        《表》数据库与图片的关系如何处理?
        http://access911.net/index.asp?u1=a&u2=71FAB51E16DC关于此主题请参考:
        如何更改表的某一个字段的属性比如允许空字符《表》
        http://access911.net/index.asp?u1=a&u2=73FABF1E1BDC
    请举一反三
      

  2.   

    你使用Access自带的OLE工具插入文档时,
    保存的方式并不全是文件的二进制码,
    应该还有OLE格式的标志。所以现实为Word文档。
    所以再使用程序读取文件插入的文件二进制格式,
    仅仅在OLE字段上显示二进制格式,它不带有标志文件格式的信息无法直接打开。
    可以保存成文件再打开。第三个问题可以使用ADO和相应的SQL语句修改表结构。
    不过建议你表结构定义完全后不要随意修改。
    程序就处理数据逻辑好了,不要在其中修改数据结构。
      

  3.   

    to feihong0233(泓) :应该还有OLE格式的标志。-------什么标志?怎么表示
    可以保存成文件再打开。-----是的,我就是这样的,这并不影响我的问题出现啊
    不过建议你表结构定义完全后不要随意修改。----可客户要求如此,没办法
      

  4.   

    解决你1、2两个问题的方法就是存取Word文档都用二进制流。示例如下:
    '** 数据库使用 ADODB.Stream 保存/读取Word文档的示例代码
    '** 引用 Microsoft ActiveX Data Objects 2.5 Library 及以上版本
    '** 引用 Microsoft Word 9.0 Objects Library
    '** 保存Word文档的字段为word(Access数据库为OLE对象,SQL数据库为二进制数据类型)Option Explicit
        Dim cn As ADODB.Connection
        Dim rs As ADODB.Recordset
        Dim StmWord As ADODB.Stream'调用WORD函数
    Sub OpenWord(FileName As String)
        Dim WordTemps As New Word.Application
        WordTemps.Documents.Add FileName, False
        WordTemps.Visible = True
    End Sub'窗体载入时连接数据库
    Private Sub Form_Load()
        Set cn = New ADODB.Connection
        cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;"& _
            "Data Source=" & App.Path & "\db1.mdb;"& _
            "Persist Security Info=False"
    End Sub'将Wowd文档保存到数据库
    Private Sub cmdSave_Click()
        Set rs = New ADODB.Recordset
        rs.Open "select * from TableName", _
            cn, adOpenKeyset, adLockOptimistic
        Set StmWord = New ADODB.Stream
        With StmWord
            .Type = adTypeBinary
            .Open
            .LoadFromFile "F:\My Documents\test.doc"
        End With
        rs.AddNew
        rs.Fields("word").Value = StmWord.Read
        rs.Update
        StmWord.Close
        rs.Close
    End Sub'读取数据库中的Word文档
    Private Sub cmdRead_Click()
        Dim Sql As String
        Sql = "select * from TableName where id=3"
        Set rs = New ADODB.Recordset
        rs.Open Sql, cn, adOpenKeyset, adLockOptimistic
        Set StmWord = New ADODB.Stream
        With StmWord
            .Mode = adModeReadWrite
            .Type = adTypeBinary
            .Open
            .Write rs!Word
            .SaveToFile App.Path & "\TempTest.doc"
            .Close
        End With
        Call OpenWord(App.Path & "\TempTest.doc")
        rs.Close
    End Sub
      

  5.   

    to  vbman2003(家人) :首先谢谢您的参与,可是根据的代码得到的是乱码!跟我上次发的帖子是一样的情况,上帖请参见http://community.csdn.net/Expert/topic/3073/3073994.xml?temp=2.238101E-02
    谢谢!
      

  6.   

    我参考了一楼大哥的程序,可得到的就是一堆乱码,online(龙卷风)以前发了个原程序给我,可我试了,没用,(希望他看到了不要受到打击),哎,
    to cuizm(射天狼):我想实现的就是在vb6.0+access2k里的OLE字段内容的输入,导出和编辑等常用功能,
    我现在正在找毛病,第一次做项目,难免要走弯路的-----我的一位师兄说。。
    神啊,救救我吧
      

  7.   

    乱码的原因上面多多高手都说明白了,是因为“保存”与“读取”WORD文档的方法不一致造成的。相信许多高手发给你的代码都是经过实践检验的,包括我写的示例也是在WIN2000和WIN98下通过的。你不能用我的示例方法去读取你数据库中现有的数据,那样读出乱码是不奇怪的,因为那些数据不是用我示例的方法保存进去的。要想读出数据库中现有的数据,偶也没招,只有和你一些学习,帮你 up