对数据库是用ADODB.Stream方法进行二进制操作的朋友请进,问题:无法将二进制流写入文件

dingyanwei 2007-05-16 06:13:49
数据库中的二进制内容都是正常的,但是用ADODB.Stream方法把数据库中的二进制代码写成文件却出现错误,错误提示:activex componet can't creat object

意思是:活动部件不能建立对象

查找微软知识库,得知的原因如下:
如果满足以下任一条件,就可能发生这种情况: • 未正确注册数据访问对象 (DAO)。

- 或 -
• 一个或多个引用丢失。

- 或 -
• 存在无效实用工具数据库引用。

- 或 -
• 对所需的库没有必需的权限。

- 或 -
• 存在损坏的向导文件。



根据其解决方案,处理无效

==========================================
另外,出现这种情况的计算机很怪异,同一个机房,有数十台电脑,配置完全一致,操作系统完全一致[因为是克隆的],但就会有些出现问题,有些没有问题。
怀疑是病毒所为,本人求解决方案。

注:本人所管理机房从未出现这种情况,本人也使用多台计算机试图模拟能够促使其出现的环境,也没有成功,因此到这里求助,如有遇到类似问题者,共同探讨交流或与之学习。谢谢
...全文
598 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dingyanwei 2007-06-12
  • 打赏
  • 举报
回复
感谢大家的帮助,经过潜心研究多方探索,最终解决该问题.
强烈建议不要使用ADODB.Stream

VBAdvisor(Sunlight)的方法我用过,的确会容易出现一些问题,当然了,可能是因为我的客户计算机的变数太大的原因
饮水需思源 2007-06-06
  • 打赏
  • 举报
回复
ADO需要2.5以上版本
VBAdvisor 2007-06-06
  • 打赏
  • 举报
回复
'Don't use CreatObject,if "Server" object haven't yet created.You may give it a try with the below codes,GOOD LUCK!

*************************************************************************
'**
'** 使用 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:\My Documents\客户资料1.mdb"

'读取文件到内容
Set iStm = New ADODB.Stream
With iStm
.Type = adTypeBinary '二进制模式
.Open
.LoadFromFile "c:\test.doc"
End With

'打开保存文件的表
Set iRe = New ADODB.Recordset
With iRe
.Open "表", iConc, adOpenKeyset, adLockOptimistic
.AddNew '新增一条记录
.Fields("保存文件内容的字段") = iStm.Read
.Update
End With

'完成后关闭对象
iRe.Close
iStm.Close
End Sub

'从数据库中读取数据,保存成文件
Sub s_ReadFile()
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=\\xz\c$\Inetpub\zj\zj\zj.mdb"

'打开表
Set iRe = New ADODB.Recordset
iRe.Open "tb_img", iConc, adOpenKeyset, adLockReadOnly
iRe.Filter = "id=64"

'保存到文件
Set iStm = New ADODB.Stream
With iStm
.Mode = adModeReadWrite
.Type = adTypeBinary
.Open
.Write iRe("img")
.SaveToFile "c:\test.doc"
End With

'关闭对象
iRe.Close
iStm.Close
End Sub

VBAdvisor 2007-06-06
  • 打赏
  • 举报
回复
activex componet can't creat object?
如果是你没有引用ADO的某个Component,不应该有此error,会报错“User-Defined Type not defined”。
很可能你的某个ActiveX没有正确安装或register.
AMX004 2007-06-06
  • 打赏
  • 举报
回复
ADODB.STREAM对象怎么用啊,我找了些资料,说是先要注册
regsvr32 "C:\Program Files\Common Files\System\ado\msado15.dll
但是注册完在部件里面也无法应用,提示是这个文件 CAN‘T BE LOADED
gxqianqin 2007-06-06
  • 打赏
  • 举报
回复
為什麼不用2.5以下的解決,那樣會通用一點.
AMX004 2007-06-06
  • 打赏
  • 举报
回复
我的问题已经解决了...我用的部件去找ADO,应该在引用里面。
colorslife 2007-06-06
  • 打赏
  • 举报
回复
是的,ADO要2.5或以上,
dingyanwei 2007-05-20
  • 打赏
  • 举报
回复
自己顶
dingyanwei 2007-05-18
  • 打赏
  • 举报
回复
我现在用的就是楼上的方法,不能解决。谢谢!

能进来看的,顶下也给分。
CathySun118 2007-05-16
  • 打赏
  • 举报
回复
参考:Dim Conn,ConnStr,Rs,Sql,MyStream

ConnStr="DBQ=" + Server.Mappath("Demo.mdb") + ";DRIVER={Microsoft Access Driver (*.mdb)};"

Set Conn = Server.CreateObject("Adodb.Connection")

Conn.Open ConnStr

Sql = "select * from demo where id=1"

Set Rs = Server.CreateObject("Adodb.RecordSet")

Rs.Open Sql,Conn,1,3

Set MyStream=Server.CreateObject("Adodb.Stream")

MyStream.Type = 1

MyStream.Open

MyStream.Write Rs("data").GetChunk(rs("data").ActualSize-78)

MyStream.SaveToFile "c:\" & Rs("fileName")

Rs.Close

Set Rs = Nothing

Conn.Close

Set Conn = Nothing

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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