我的一个应用程序中引用了ADO对象,编译后在本机(简称电脑A)运行正常,但是在其他多台电脑上(统称电脑B)运行时出现“类不支持自动化或不支持期望的接口”错误,我已经在百度、谷歌了一大通,找到的答案无外乎是电脑A与电脑B的数据库版本与环境不同,通过在电脑A或者电脑B上更新MDAC什么的来解决,但我的问题奇怪之处在于:
1、电脑A与电脑B的ADO版本都是2.8,而且msado15.dll的版本都是2.81.3012.0;
2、电脑A与电脑B的系统都是WinXP SP3,都安装了VB6 SP6,在电脑A上编译后,在本机可以运行,到电脑B上运行出错;但是在电脑B上编译后,在电脑B与电脑A上运行都不会出错。所以我分析,我的问题应该与ADO版本没有什么关系,请朋友们帮我分析一下会是什么原因造成的,非常感谢!!!

解决方案 »

  1.   

    * MDAC 的版本* Microsoft Excel 的版本(如果使用了 Excel 的自动化)......要看你的程序做了什么。
      

  2.   


    XP的确是不同版本的GHOST版,但是这个应该不是主因。否则,在不同版本的GHOST版XP上就会出错,VB程序的通用性肯定不会这么差。
      

  3.   

    我查看了一下,电脑A和电脑B对ADO对象的引用都是“Microsoft ActiveX Data Objects 2.8 Library”,也都是msado15.dll这个文件,而这个文件的版本都是2.81.3012.0,文件大小也是一样的。这是不是说明两台电脑的MDAC版本是一致的呢?如果不是的话,MDAC这个东东的版本要从哪里查看呢?另外,我的这个应用程序也确实引用了Excel对象,但应该不是这个造成的,因为我试验过,在电脑A上编译引用Excel而不引用ADO的程序,到电脑B上是可以正常运行的。我在连接数据库时用的字符串是"Provider=microsoft.jet.oledb.4.0;data source=......;persist security info=false",问题会不会是出在这里呢?
      

  4.   

    这个东西是由于MS万恶的dll注册机制带来的
    具体说一下:
    VB这个玩意在生成exe后要有一系列dll才能确保正确运行,这就是VB程序必须打包才能运行的原因。这些dll来源不同(有的是MS系统的,也有MS的软件运行环境带的,还有第三方的包括字自己写的一些dll,而且在你使用电脑安装软件、打补丁的时候dll悄悄的升级)这就有问题了,dll冲突,也叫 DLL hell。具体表现:类不支持自动化或不支持期望的接口等错误。
    具体解决方案:更新安装包中相应的dll为最新,或者打包时使用最新的系统运行环境。------------------------------------
    以前经常被这个问题害得去现场,很气愤MS为什么不彻底解决,但是据说这个问题要等到Windows消失。
      

  5.   


    感谢回复!
    我这个程序没有制作安装包,因为电脑A和电脑B都安装了VB6,所以我是在一台电脑上编译后,直接拿exe程序到另一台电脑运行的。而且ADO这个东西好像也不好打包。
      

  6.   

    很早以前我也遇到过,因为对象的缺省属性没有写,比如rs(FieldName).Value 只写rs(FieldName),我想,应该是注册表问题,系统重装后,问题不再出现