Vb6 错误-在Windows 8.1 64位上调用recordset.Open()时未注册2147221164类

Vb6 错误-在Windows 8.1 64位上调用recordset.Open()时未注册2147221164类,vb6,windows-8.1,32bit-64bit,Vb6,Windows 8.1,32bit 64bit,在Windows 8.1 64位计算机上执行以下代码时,我收到错误-2147221164未注册的类: Dim conn as ADODB.Connection Set conn = New ADODB.Connection conn.Open dbConnectionString Dim rsHere as ADODB.Recordset Set rsHere = New ADODB.Recordset ' Error happens at this line rsHere.Open st

在Windows 8.1 64位计算机上执行以下代码时,我收到错误
-2147221164未注册的类

Dim conn as ADODB.Connection
Set conn = New ADODB.Connection 
conn.Open dbConnectionString

Dim rsHere as ADODB.Recordset
Set rsHere = New ADODB.Recordset

' Error happens at this line
rsHere.Open strSql, conn, adOpenDynamic, adLockOptimistic
代码是在Windows XP机器上编译的,因此我认为这与此处概述的问题不一样:

我在注册表中找到的ADODB版本是6.0,而我使用的是2.8。我浏览了一下网络,在某个地方读到,在Windows8上对ADODB进行了突破性的更改,但我不确定这是否是导致我的问题的原因


有人知道我可以检查什么来消除这个错误吗?

我在XP机器上编译不同版本的Windows时遇到了类似的问题

从页面(引用Microsoft KB文章):

“ADO 2.7及更高版本中的某些ADO API依赖于平台”

您还可以在“原因”部分找到更多详细信息


作为一种解决方法,您可以尝试延迟绑定ADO调用。在我的例子中,在Windows7SP1机器上编译成功了。

几乎可以肯定这是同一个问题。仔细检查SysInternals的进程监视器。我使用了进程监视器,并跟踪到一些注册表调用没有成功。它们与ADO.NET6.0有关。不幸的是,拥有这些知识并不能使我更接近于解决问题,因为我不知道这些注册表项应该是什么。最明显的错误是:RegOpenKey HKLM\SOFTWARE\MICROSOFT\WindowsRuntime\CLSID\{00000542-0000-0010-8000-00AA006D2EA4}名称未找到所需的访问权限:Read-该CLSID映射到Windows 8.1计算机上的ADODB 6.0。我害怕回答。我们使用的是古老的Component One自定义控件,安装程序不在Windows 7上运行。因此,我无法在Windows 7计算机上构建应用程序。实际上,我们在Windows 7 x64计算机上安装了Component One电子表格控件。这是一个手动过程,必须是32位版本,并且ocx文件应在regsvr32中注册。许可证文件应复制到c:\Windows\System(而不是System32),可执行文件(扩展控制有一个EXE和一个DLL)需要驻留在c:\Windows\SysWOW64中。这并不像听起来那么难,值得我们付出努力。