无法使用复杂的编程链创建ADODB.Connection

时间:2010-08-25 16:21:58

标签: c# c++ com ado fitnesse

好的,这是一个非常复杂的问题,我会尽力解释。

我们有一个c ++应用程序,它与Sql Connection通信如下:

CoCreateInstance(_T("ADODB.Connection"))

这很好用。

我们最近将所有后端代码都变成了一个Com对象。如果我编写一个Vb程序来加载我们的Com对象并进行一些数据库操作,一切正常,CoCreateInstance(_T("ADODB.Connection"))
仍然有效。

我们使用fitnesse进行测试,所以我写了一个夹具:
1)将一串vb代码输入到html页面 2)编译vb代码
3)运行使用我们的Com对象的vb代码 * fitnesse是一个java应用程序,因此代码路径也可以通过Java传递。

现在当任何操作触及数据库时,Com Object会发生异常。使用消息框,删除代码我将问题缩小到这行代码:

CoCreateInstance(_T("ADODB.Connection"))

通常返回代码为0,但是使用这段代码调用代码我得到返回代码:800401F3,表示无法找到要加载的对象。

我正拉着我的头发试图弄清楚发生了什么。任何一点见解将不胜感激。

2 个答案:

答案 0 :(得分:2)

它告诉你它无法在注册表中找到ProgId。这不是很健康,它是任何Windows安装上非常标准的组件。验证这一点,启动regedit.exe并导航到HKLM \ Software \ Classes \ ADODB.Connection

如果缺少,则需要在该计算机上安装dbase提供程序。从Microsoft下载MDAC 2.8安装程序并运行它。如果它没有丢失那么你有一个更神秘的问题,也许这与64位操作系统有关。然后查看HKLM \ Software \ Wow6432Node。通过使用SysInternals的ProcMon工具获取其他诊断信息,以查看它在注册表中的内容。

答案 1 :(得分:1)

作为替代方案,您不会说您的com“对象”是否为.dll。如果是,则确保它是“自注册”,或者您需要在命令提示符下运行它。

regsvr32 myobject.dll

如果它是带有COM对象的exe,请通过使用“/ RegServer”命令行选项运行程序来注册对象,如下所示:

myobject.exe /RegServer

HTH