vb下载数据库二进制附件,打开是乱码。

a6551139 2018-04-10 03:39:49
以下是代码,目前这个代码是默认保存在C盘,能否有类似让用户另存为的代码。
On Error GoTo handleErr
Dim rs As ADODB.Recordset
Dim mstream As ADODB.Stream
Dim strSql As String
Dim abc As Boolean
Dim bytFile() As Byte

Set rs = New ADODB.Recordset
strSql = "select * from t_accessory where FID=7 "
abc = k3Appcon.ExecuteRs(strSql, rs)
If (abc) Then
If (rs("FData").ActualSize > 1) Then '判断是否为空
'保存到文件
bytFile = rs.Fields("FData").Value

Set mstream = New ADODB.Stream
With mstream
.Mode = adModeReadWrite
.Type = adTypeBinary
.Open
' .Write rs("FData")
.Write bytFile
.SaveToFile "C:\hj.txt"
End With

'关闭对象
rs.Close
mstream.Close

End If
End If

Exit Sub
handleErr:
MsgBox Err.Description
End Sub
...全文
525 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2018-04-15
  • 打赏
  • 举报
回复
删数据库这种“作死”,那就怨不得别人了。
脆皮大雪糕 2018-04-15
  • 打赏
  • 举报
回复
引用 12 楼 Chen8013 的回复:
[quote=引用 11 楼 chewinggum 的回复:] 所以,最后还是强烈建议你不要在数据库里面塞文件。
我一直没使用那些“数据库”,难道没有存储“字节序列”的字段类型? 要是放“外部文件”中,造成“一大堆的小文件”,我觉得这样的情况也有点恶心。 并且,放“外部”也有点“不安全”吧,要是手贱把它当成垃圾文件删除了,数据不就丢失了? [/quote] 说到手贱,还有一种情况是,手贱把数据库删了…… 如果规划的是一个大型系统,文件极多,那么文件和数据库是可以分开放在不同的机器山的。互联网访问的时候先通过数据库快速定位到文件路径,然后再通过其他链路并发的获取文件。在文件获取期间不占用数据库IO。 放在外部的文件可通过增加服务器扩存储,比如将频繁处理的文件放在不同的机器上分散压力。这时候仅需要对部分文件进行迁移,然后修改部分数据库记录。如果所有东西都放在数据库里,运行几年后的系统做迁移很痛苦的。
舉杯邀明月 2018-04-15
  • 打赏
  • 举报
回复
引用 11 楼 chewinggum 的回复:
所以,最后还是强烈建议你不要在数据库里面塞文件。
我一直没使用那些“数据库”,难道没有存储“字节序列”的字段类型? 要是放“外部文件”中,造成“一大堆的小文件”,我觉得这样的情况也有点恶心。 并且,放“外部”也有点“不安全”吧,要是手贱把它当成垃圾文件删除了,数据不就丢失了? 
脆皮大雪糕 2018-04-15
  • 打赏
  • 举报
回复
所以,最后还是强烈建议你不要在数据库里面塞文件。
a6551139 2018-04-14
  • 打赏
  • 举报
回复
引用 7 楼 chewinggum 的回复:
你把你上传的文件扩展名改为txt打开看看是什么
excel word 图片是其他测试数据,不是txt的内容
a6551139 2018-04-14
  • 打赏
  • 举报
回复
引用 7 楼 chewinggum 的回复:
你把你上传的文件扩展名改为txt打开看看是什么


上传的txt内容:

数据库image存储的结果
0x78DA0165009AFF20312E424F5320BCD3BAC5B5A5B1EDD2BBD0D0B7D6C1BDD0D00D0A0D0A322EC1D0D6AEBCE4B5C4B9D8CFB528CAF4D0D4C0EFCCEDBCD3A1AFCAC2BCFEA1AE290D0A0D0A332E6D697372736F66742064616F20332E3628D5EBB6D4B5F7D3C361636565737329720C3724
下载的txt内容:

测试数据如果是excel或word就全部是乱码,图片就无法打开


舉杯邀明月 2018-04-14
  • 打赏
  • 举报
回复
你在8楼贴的内容: 数据库image存储的结果 0x78DA0165009AFF20312E424F5320BCD3BAC5B5A5B1EDD2BBD0D0B7D6C1BDD0D00D0A0D0A322EC1D0D6AEBCE4B5C4B9D8CFB528CAF4D0D4C0EFCCEDBCD3A1AFCAC2BCFEA1AE290D0A0D0A332E6D697372736F66742064616F20332E3628D5EBB6D4B5F7D3C361636565737329720C3724 上面这段“编码”,红色部分是“多余的内容”,中间黑色部分就是你的“原文”。 把头、尾去掉就行了,说不定那两部分都是“固定长度”的。
脆皮大雪糕 2018-04-13
  • 打赏
  • 举报
回复
你把你上传的文件扩展名改为txt打开看看是什么
脆皮大雪糕 2018-04-13
  • 打赏
  • 举报
回复
你放进数据库里的到底是什么数据
a6551139 2018-04-13
  • 打赏
  • 举报
回复
做了个测试数据 数据库image字段值: 0x78DA3334440389B881112600002A0B113300 VB代码段:
                              ' rsrs("FData")是读出的Image数据类型字段
                                Dim LngFileLen As Long, BytFile() As Byte
                                 LngFileLen = rsrs("FData").ActualSize
                                 If LngFileLen > 0 Then
                                   ReDim BytFile(LngFileLen)
                                   BytFile = rsrs("FData").GetChunk(LngFileLen)
                                   lngFreeFile = FreeFile
                                   Open "c:/a.txt" For Binary Access Write As lngFreeFile
                                   Put lngFreeFile, , BytFile()
                                   Close lngFreeFile
                                       '写数据成功标志
                                   CreateJZFile = True
                                   MsgBox CreateJZFile
                                 End If
下载的a.txt文本结果: x趀愝N翤咃Ixa锥衹煫羊#ァb m攧 bZK厳儋]畑3{3g3缣7囃2K?岛僡礡瑻颪N噇驥仄<{肨}G|硸SW??髅4蘖I?檦蔣棫n纞'芶F5?B雽諱 泲论_@`?光壪?筿莫嫑€鉈'呧茷 w*帉孪捱吼豒?誺YSOm冃"轠?@Ob0頊0釉?+硠稃k5钿墠%OFe[Λ?Z /B%P绥rw攀裬敱T耓??E?Oi?%?i??("脴晨@: "???o???▔
a6551139 2018-04-13
  • 打赏
  • 举报
回复
引用 1 楼 Chen8013 的回复:
“二进制文件”用“文本文件”方式去看,当然看到的会是“乱码”啊! 你要“另存”,直接用FileCopy不就行了? Call FileCopy("源文件路径", "目标位置路径") “文件路径”最好是用“全路径”的方式,免得“当前路径”不明确,造成找不到源文件,或者没复制到想要的地方去……
我重新换个了写法还是乱码,能否提供下帮助
脆皮大雪糕 2018-04-10
  • 打赏
  • 举报
回复
把一个附件放到数据库字段中去,不是不行,但是强烈不建议这么做。 可以把附件按一定规则存放在文件目录结构中,数据库中仅记录存放的相对路径。 减少数据库的IO消耗,减小数据库文件的空间,文件容易维护,今后数据库的迁移、换硬盘啥啥啥的都会方便好多。
赵4老师 2018-04-10
  • 打赏
  • 举报
回复
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
舉杯邀明月 2018-04-10
  • 打赏
  • 举报
回复
“二进制文件”用“文本文件”方式去看,当然看到的会是“乱码”啊! 你要“另存”,直接用FileCopy不就行了? Call FileCopy("源文件路径", "目标位置路径") “文件路径”最好是用“全路径”的方式,免得“当前路径”不明确,造成找不到源文件,或者没复制到想要的地方去……

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧