当前位置: 代码迷 >> VB >> 请迷津
  详细解决方案

请迷津

热度:4596   发布时间:2013-02-26 00:00:00.0
请高手指点迷津
我做了个软件,打包后安装在其他电脑上,一启动就发生“类不支持自动化或不支持期望的接口 431”错误,我引用的是MIcrosoft ActiveX Data 2.5 Library, 后来改用MIcrosoft ActiveX Data 2.8 Library 后就正常了
。过了几天,又把那个软件安装在其他电脑上,有发生“类不支持自动化或不支持期望的接口 431”错误,这时我改引用MIcrosoft ActiveX Data 2.5 Library, 这才正常。
我就纳闷了,为什么同样的软件在不同的电脑里发生两种情况:一个是支持MIcrosoft ActiveX Data 2.5 Library,而另一个支持MIcrosoft ActiveX Data 2.8 Library 。
我所使用的数据库连接方法是:
    Dim connectionstring As String
    connectionstring = "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=manager;Data Source = " + App.Path + "\data.mdb"
    Cn.Open connectionstring
    Cn.Close
请高手指点指点,如何做,才能把软件做得一次性稳定,如此调来调去真麻烦

------解决方案--------------------------------------------------------
那你可以使用自动化代替引用。

Set conn = CreateObject("ADODB.Connection")
...
------解决方案--------------------------------------------------------
在出错的机器上安装MDAC2.8MDACTYP.EXE试试
------解决方案--------------------------------------------------------
你的 Cn 应该定义成 Object 类型,如:
Dim Cn As Object
然后需要初始化,比如你原来的是用 New 初始化的,如:
Dim Cn As New Connection
现在应为定义成 Dim Cn As Object 所以初始化过程变成
Set Cn = CreateObject("ADODB.Connection")
这个过程可以放到Load 事件里,如:

Dim Cn As Object    ' 定义连接对象
Private Sub Form_Load()
    Set Cn = CreateObject("ADODB.Connection")
    Cn.open "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=manager;Data Source = " + App.Path + "\data.mdb"
    ' 定义数据集对像
    Dim rs As Object
    Dim count As Long
    Set rs = CreateObject("ADODB.Recordset")
    rs.open "select count(*) as c from 表", Cn, 3, 1
    count = rs!c
    rs.Close
    Set rs = Nothing
    MsgBox "查询表的记录数为:" & count
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Cn.Close
    Set Cn = Nothing
End Sub


------解决方案--------------------------------------------------------
你用来编译的机器是什么操作系统?找一台确认没有问题的机器,将 C:\Program Files\Common Files\System\ado 的内容覆盖你机器上对应路径的文件。

另外,最好的低版本的 Windows 下打包,安装时保留高版本系统文件。
  相关解决方案