ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

用二进制把文件存入SQL的image字段

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-9-8 09:51 | 显示全部楼层 |阅读模式

请教在EXCELVBA中怎样用二进制把文件存入SQL的image字段、怎样把文件读出存入磁盘。

最好有把EXCEL文件存入SQL的image字段和打开SQL的image字段中的EXCEL文件的例子。

在程序开发提问了很久,没有解决。Access 与 SQL Server 的应用与开发 中的版主们,高手们

应该有解决办法吧?

网上的类似方法,修改后没有调试成功。

Private Const BLOCKSIZE = 4096 '每次读写块的大小 '将图片保存到数据库中 Public Function SavePicToDB(ByRef ADOFeild As ADODB.Field, PicFullName As String) As Boolean Dim SourceFile As Long '定义读取图片时使用的文件号 Dim FileLength As Long '标识文件长度 Dim NumBlocks As Long '文件定义的块数量 Dim bytDataBlocks() As Byte '定义数据块数组 Dim LeftOver As Long '文件被分块后剩余的字节数 Dim i As Long '定义循环中使用的变量 On Error GoTo ErrHandle '----------------------------------------------------------------- '获取一个尚未使用的文件号 '----------------------------------------------------------------- SourceFile = FreeFile '----------------------------------------------------------------- '打开以二进制的方式图片文件 '----------------------------------------------------------------- Open PicFullName For Binary Access Read As #SourceFile '----------------------------------------------------------------- '获取打开的图片文件的长度(字节) '----------------------------------------------------------------- FileLength = LOF(SourceFile) '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= '判断文件是否存在,0---不存在或无效;其他---存在 '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= If FileLength = 0 Then '不存在... Close #SourceFile SavePicToDB = False Else '------------------------------------------------------------- '对文件按预定的块的大小进行分割 '------------------------------------------------------------- NumBlocks = FileLength \ BLOCKSIZE '文件分割的块的数量 LeftOver = FileLength Mod BLOCKSIZE '文件分割后剩余的 '------------------------------------------------------------- '初始化字段中的内容---清空当前记录中本字段的内容 '------------------------------------------------------------- ADOFeild.value = Null '------------------------------------------------------------- '重新定义数据块的大小 '------------------------------------------------------------- ReDim bytDataBlocks(BLOCKSIZE) '------------------------------------------------------------- '将图片各块的内容写入数据库相应字段 '------------------------------------------------------------- For i = 1 To NumBlocks Get #SourceFile, , bytDataBlocks() ADOFeild.AppendChunk bytDataBlocks() Next If LeftOver > 0 Then '------------------------------------------------------------- '重新定义数据块的大小 '------------------------------------------------------------- ReDim bytDataBlocks(LeftOver) '------------------------------------------------------------- '将图片剩余字节的内容写入数据库相应字段 '------------------------------------------------------------- Get #SourceFile, , bytDataBlocks() ADOFeild.AppendChunk bytDataBlocks() End If Close #SourceFile End If SavePicToDB = True Exit Function ErrHandle: Close #SourceFile SavePicToDB = False End Function '从数据库中读取图片 Public Function GetPicFromDB(ByRef ADOFeild As ADODB.Field, PicFullName As String) As Boolean Dim SourceFile As Long '定义读取图片时使用的文件号 Dim FileLength As Long '标识文件长度 Dim NumBlocks As Long '文件定义的块数量 Dim bytDataBlocks() As Byte '定义数据块数组 Dim LeftOver As Long '文件被分块后剩余的字节数 Dim i As Long '定义循环中使用的变量 On Error GoTo ErrHandle If IsNull(ADOFeild) Then GetPicFromDB = False Exit Function End If '----------------------------------------------------------------- '获取数据库中存贮的图片的长度(字节) '----------------------------------------------------------------- FileLength = LenB(ADOFeild) '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= '判断文件是否存在,0---不存在或无效;其他---存在 '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= If FileLength = 0 Then '不存在... GetPicFromDB = False Else '------------------------------------------------------------- '对文件按预定的块的大小进行分割 '------------------------------------------------------------- NumBlocks = FileLength \ BLOCKSIZE '文件分割的块的数量 LeftOver = FileLength Mod BLOCKSIZE '文件分割后剩余的 '------------------------------------------------------------- '获取一个尚未使用的文件号 '------------------------------------------------------------- SourceFile = FreeFile '------------------------------------------------------------- '打开以二进制的方式图片文件(读写模式) '------------------------------------------------------------- Open PicFullName For Binary Access Write As #SourceFile '------------------------------------------------------------- '将图片从数据库相应字段中读出写入文件中 '------------------------------------------------------------- For i = 1 To NumBlocks bytDataBlocks() = ADOFeild.GetChunk(BLOCKSIZE) Put #SourceFile, , bytDataBlocks() Next If LeftOver > 0 Then '--------------------------------------------------------- '将图片剩余字节的内容写入数据库相应字段 '--------------------------------------------------------- bytDataBlocks() = ADOFeild.GetChunk(LeftOver) Put #SourceFile, , bytDataBlocks() End If Close #SourceFile End If GetPicFromDB = True Exit Function ErrHandle: Close #SourceFile GetPicFromDB = False End Function

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-9-8 16:36 | 显示全部楼层

EXCEL服务器软件就用了有把EXCEL文件存入SQL数据库的image字段和打开SQL数据库的image字段中的EXCEL文件的功能。

论坛里没有对此问题感兴趣的高手吗?????

大家一起研究研究。

TA的精华主题

TA的得分主题

发表于 2005-9-13 09:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这个问题用vba解决并不难,你的ado程序部分设计的不对。

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-9-16 15:09 | 显示全部楼层

问题错在哪里?请指教。

你有这样的例子吗?传上来大家学习学习。

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-15 17:40 , Processed in 0.032812 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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