ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 七叶一枝梅

[分享]成功解决DOC文档写入Access数据库并完整读出的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-11-2 19:09 | 显示全部楼层
要理解这个例子的步骤最好是:
1、先看这个并下载例子文件,实际操作感受一下楼主的用意;
http://club.excelhome.net/thread-74977-1-1.html

2、再看本例子并下载文件自己琢磨分析,方能大致理解楼主意图。谢谢楼主的引领作用!
http://club.excelhome.net/viewthread.php?tid=142907&extra=&page=1

3、要是楼主能把access中的操作方式和长二进制代码弄个gif动画展示就好了,否则都是乱糟糟的弄不清晰。

4、如何将文件保存在OLE字段里(OLE写入/读出)?OLE文件读入和读出

支持的类型使所有文件,当然,你在读入数据的时候,最好做一个字段保存文件的类型,在保存文件的时候,就可以根据类型选择要保存的类型了。
Option Compare Database
Option Explicit  

Public Function GetFromFile(strTable As String, strField As String, strFilter As String, objFileName As String) As Boolean

'============================================================
' 过程函数名: CommModule.GetFromFile 类型:Function
' 参数:
'     strTable (String)  :准备保存图形数据的表名称
'     strField (String)  :准备保存图形数据的字段名称
'     strFilter (String)  :打开表的过滤字符串,用于定位并确保被打开的表的数据的唯一性
'     objFileName (String) :准备输入到表里边的图象文件名称
' 返回:如果保存成功,返回True,如果失败,返回False
'-------------------------------------------------------------
' 说明:把图象文件的数据保存到表里边
'-------------------------------------------------------------
' 修订历史:
'=============================================================
Dim recset   As ADODB.Recordset, FileData() As Byte, FileNo As Long, FileSize As Long, strSQL As String

  strSQL = "Select " & strField & " From " & strTable & " Where " & strFilter & ";"
  Set recset = New ADODB.Recordset
  recset.Open strSQL, CurrentProject.Connection, adOpenDynamic, adLockOptimistic
  GetFromFile = True
  If recset(strField).Type <> DB_OLE Or Not IsFileName(objFileName) Then
    GetFromFile = False     '如果字段不是OLE字段,或者文件不存在,返回错误
    GoTo EndGetFromFile
  End If
  If recset.EOF Then       '如果记录不存在,返回错误
    GetFromFile = False
    GoTo EndGetFromFile
  End If
  FileSize = GetFileSize(objFileName) '如果被打开的文件大小为零,返回错误
  If FileSize <= 0 Then
    GetFromFile = False
    GoTo EndGetFromFile
  End If
  ReDim FileData(FileSize)      '重新初始化数组
  FileNo = FreeFile          '获取一个空闲的文件号
  Open objFileName For Binary As #FileNo '打开文件
  Get #FileNo, , FileData()      '读取文件内容到数组
  Close #FileNo            '关闭文件
  recset(strField).value = FileData() '保存数据
  recset.Update            '更新数据
  Erase FileData           '释放内存
EndGetFromfile:
  recset.Close            '关闭RecordSet
  Set recset = Nothing        '释放内存
End Function

Public Function SaveToFile(strTable As String, strField As String, strFilter As String, strFileName As String) As Boolean
'============================================================
' 过程函数名: CommModule.SaveToFile 类型:Function
' 参数:
'     strTable (String)  :保存图形数据的表名称
'     strField (String)  :保存图形数据的字段名称
'     strFilter (String)  :打开表的过滤字符串,用于定位并确保被打开的表的纪录的唯一性
'     strFileName (String) :准备保存的图象的文件名称
' 返回:如果保存成功,返回True,如果失败,返回False
'-------------------------------------------------------------
' 说明:把由GetFromFile函数保存到表中OLE字段的数据还原到文件
'-------------------------------------------------------------
' 修订历史:
'=============================================================
Dim recset   As ADODB.Recordset, FileData() As Byte, FileNo As Long, FileSize As Long, strSQL As String

  strSQL = "Select " & strField & " From " & strTable & " Where " & strFilter & ";"
  Set recset = New ADODB.Recordset
  recset.Open strSQL, CurrentProject.Connection, adOpenDynamic, adLockOptimistic
  SaveToFile = True
  If recset(strField).Type <> DB_OLE Then
    SaveToFile = False     '如果字段不是OLE字段,返回错误
    GoTo EndSaveToFile
  End If
  If recset.EOF Then       '如果记录不存在,返回错误
    SaveToFile = False
    GoTo EndSaveToFile
  End If
  FileNo = FreeFile
  Open strFileName For Binary As #FileNo
  ReDim FileData(recset(strField).ActualSize) '重新初始化数组
  FileData() = recset(strField).GetChunk(recset(strField).ActualSize) '把OLE字段的内容保存到数组
  Put #FileNo, , FileData()  '把数组内容保存到文件
  Close #FileNo
  Erase FileData
EndSaveTofile:
  recset.Close
  Set recset = Nothing
End Function

参考:www.access-cn.com

5、关于所谓的VBE引入组件问题
word中,按Alt+F11进入VBE界面-->工具-->引用-->Microsoft ActiveX Date Object 2.8打上勾.

6、开启ADODB.Stream组件的办法
在开始—运行里执行:regsvr32 "C:\Program Files\Common Files\System\ado\msado15.dll

[ 本帖最后由 lengyff 于 2009-11-3 14:57 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-11-5 11:08 | 显示全部楼层
楼主真是强大啊

TA的精华主题

TA的得分主题

发表于 2010-5-5 15:11 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-6-29 02:32 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-2-14 15:28 | 显示全部楼层
2005年,我使用authorware做一个考试系统,就需要读取带图文混排的word文档题库,结果由于authorware中无法读取word文档(或者我没有找到相关控件),结果,制作题库时,只有一题一个图片,费了九牛二虎之力,而且维护起来相当麻烦,要是早点拜读楼主的大作,也许就会少走许多弯路。
如此强贴,大力地顶!楼主辛苦了!

TA的精华主题

TA的得分主题

发表于 2011-3-16 23:19 | 显示全部楼层
太厉害的技术贴,谢谢分享。

TA的精华主题

TA的得分主题

发表于 2011-7-19 21:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
收藏学习,谢谢分享,看看能不能做成自动生成的合同。

TA的精华主题

TA的得分主题

发表于 2011-6-30 21:25 | 显示全部楼层

仍然不行

我有大量WORD文档是用插入对象的方法加到数据库的,所以读出的是一堆乱码.再改回去不可能了,有没有办法解决?请大家赐教.

TA的精华主题

TA的得分主题

发表于 2011-6-30 19:32 | 显示全部楼层

仍然不行

我试了一下你的代码,生成的DOC文件用WORD打开是乱码.

TA的精华主题

TA的得分主题

发表于 2011-7-20 15:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
能否在asp 网页中读出2进制的word文档
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 09:36 , Processed in 0.038714 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表