数据库中的二进制内容都是正常的,但是用ADODB.Stream方法把数据库中的二进制代码写成文件却出现错误,错误提示:activex componet can't creat object意思是:活动部件不能建立对象查找微软知识库,得知的原因如下:
如果满足以下任一条件,就可能发生这种情况: • 未正确注册数据访问对象 (DAO)。- 或 - 
• 一个或多个引用丢失。- 或 - 
• 存在无效实用工具数据库引用。- 或 - 
• 对所需的库没有必需的权限。- 或 - 
• 存在损坏的向导文件。 根据其解决方案,处理无效==========================================
另外,出现这种情况的计算机很怪异,同一个机房,有数十台电脑,配置完全一致,操作系统完全一致[因为是克隆的],但就会有些出现问题,有些没有问题。
怀疑是病毒所为,本人求解决方案。注:本人所管理机房从未出现这种情况,本人也使用多台计算机试图模拟能够促使其出现的环境,也没有成功,因此到这里求助,如有遇到类似问题者,共同探讨交流或与之学习。谢谢

解决方案 »

  1.   

    参考:Dim Conn,ConnStr,Rs,Sql,MyStreamConnStr="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,3Set MyStream=Server.CreateObject("Adodb.Stream")MyStream.Type = 1MyStream.OpenMyStream.Write Rs("data").GetChunk(rs("data").ActualSize-78)MyStream.SaveToFile "c:\" & Rs("fileName") Rs.CloseSet Rs = NothingConn.CloseSet Conn = Nothing
      

  2.   

    ADODB.STREAM对象怎么用啊,我找了些资料,说是先要注册
    regsvr32 "C:\Program Files\Common Files\System\ado\msado15.dll
    但是注册完在部件里面也无法应用,提示是这个文件 CAN‘T BE LOADED
      

  3.   

    activex componet can't creat object?
    如果是你没有引用ADO的某个Component,不应该有此error,会报错“User-Defined Type not defined”。
    很可能你的某个ActiveX没有正确安装或register.
      

  4.   

    '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
      

  5.   

    我的问题已经解决了...我用的部件去找ADO,应该在引用里面。
      

  6.   

    感谢大家的帮助,经过潜心研究多方探索,最终解决该问题.
    强烈建议不要使用ADODB.StreamVBAdvisor(Sunlight)的方法我用过,的确会容易出现一些问题,当然了,可能是因为我的客户计算机的变数太大的原因