Ms access Access 97到2003转换丢失MSCOMCTL.OCX

Ms access Access 97到2003转换丢失MSCOMCTL.OCX,ms-access,ms-office,Ms Access,Ms Office,我正在将Access97 FE迁移到2003。一段时间以来,我一直在编译97前端和2003前端(97用于XP机器,2003用于Win7机器)。就在最近(上周?)。。转换时,我开始丢失MSCOMCTL.OCX引用。然而,奇怪的是,它只发生在我运行Office2003(SP3)的Windows7(32位)机器上。如果我在另一台Win7 64位Office 2003(SP3)计算机上转换它,我不会丢失引用的文件 我已经多次注册/注销了C:\windows\system32\mscomctl.ocx(请

我正在将Access97 FE迁移到2003。一段时间以来,我一直在编译97前端和2003前端(97用于XP机器,2003用于Win7机器)。就在最近(上周?)。。转换时,我开始丢失MSCOMCTL.OCX引用。然而,奇怪的是,它只发生在我运行Office2003(SP3)的Windows7(32位)机器上。如果我在另一台Win7 64位Office 2003(SP3)计算机上转换它,我不会丢失引用的文件

我已经多次注册/注销了C:\windows\system32\mscomctl.ocx(请确保以管理员身份运行命令提示符)。。然后重新启动。我已经在有问题的机器上卸载了Office 2003,并重新加载了它,但没有用。我已确保C:\windows\system32位于路径中。。(是的)

如果我在我的Win7 64位机器上编译FE,并将其分发到这个故障机器,它将无法无限期地正确启动应用程序(在底部获得一个初始化栏)。如果我在故障机器上重新引用该文件并重新创建MDE,它将在32位版本和64位版本的Windows 7上工作(即使64位在C:\Windows\syswow64中有mscomctl.ocx)

我的Win7 32位设置有问题吗?我可以使用我的FE的旧版本(我在进行更改时保留回购协议),这些似乎不会失去参考。所讨论的FE在我的Acc97机器和我的Win7 64位机器上编译良好。我曾经在“现在”有问题的Win7 32位机器上编译我所有的2003年FE

我也多次对MDB文件运行反编译/修复/编译/压缩

有人能推荐一些东西试试吗

更新
好吧,我把“问题”工作站吹走,重新加载Win7 Pro 64位,这将使WSUS任务更容易。然而问题依然存在。。。所以现在我不知道该怎么想。

也许您机器上的
MSCOMCTL.OCX
已被更新版本的Windows自动更新所取代

在工作中,在自动安装之后,我们上周在一些机器上遇到了问题。
引用上述链接的“此安全更新的已知问题”部分:

基于Windows公共控件的嵌入式ActiveX控件可能无法加载到现有的office文档中、第三方应用程序中以及在开发人员模式下插入新控件时

显然,我们不是唯一有问题的人:

您计算机上的
MSCOMCTL.OCX
可能已被更新版本替换为自动Windows更新

在工作中,在自动安装之后,我们上周在一些机器上遇到了问题。
引用上述链接的“此安全更新的已知问题”部分:

基于Windows公共控件的嵌入式ActiveX控件可能无法加载到现有的office文档中、第三方应用程序中以及在开发人员模式下插入新控件时

显然,我们不是唯一有问题的人:

您应该确认Access应用程序使用的MSCOMCTL.OCX版本与您可能编译它的任何机器上使用的版本相同。通过以下方式检查引用正在使用的文件:

Function ListReferences() Dim a As Long Dim b As Long a = References.count For b = 1 To a Debug.Print b & ": " & References(b).Name & vbTab & vbTab & References(b).FullPath Next b End Function 函数ListReferences() 暗淡如长 暗b一样长 a=参考。计数 对于b=1到a 调试。打印b&“:”&引用(b)。名称&vbTab&vbTab&References(b)。完整路径 下一个b 端函数 这将为您提供Access FE中所有引用的文件名和路径列表


使用Windows资源管理器查找Access引用的MSCOMCTL.OCX。右键单击该文件并记录版本。确认您在所有其他计算机上使用的MSCOMCTL.OCX版本相同。

您应该确认Access应用程序使用的MSCOMCTL.OCX版本与您可能编译它的任何计算机上使用的版本相同。通过以下方式检查引用正在使用的文件:

Function ListReferences() Dim a As Long Dim b As Long a = References.count For b = 1 To a Debug.Print b & ": " & References(b).Name & vbTab & vbTab & References(b).FullPath Next b End Function 函数ListReferences() 暗淡如长 暗b一样长 a=参考。计数 对于b=1到a 调试。打印b&“:”&引用(b)。名称&vbTab&vbTab&References(b)。完整路径 下一个b 端函数 这将为您提供Access FE中所有引用的文件名和路径列表


使用Windows资源管理器查找Access引用的MSCOMCTL.OCX。右键单击该文件并记录版本。确认您在所有其他计算机上使用的MSCOMCTL.OCX是同一版本。

我认为程序员地狱是一个您永远被迫为MSCOMCTL可比性问题工作的地方。看到印刷品上提到的OCX的名字,我都有点恶心。我没说我喜欢它。。那是肯定的。:)我认为程序员地狱是一个你被迫永远为MSCOMCTL可比性问题工作的地方。看到印刷品上提到的OCX的名字,我都有点恶心。我没说我喜欢它。。那是肯定的。:)我确实看到了这个,但是这台机器没有那个补丁。为了避免这个问题,它被保留在WSUS中。我确实看到了这个,但是这台机器没有那个补丁。为了避免这个问题,它在WSUS中被保留了下来。引用看起来很正常。MSCOMCTL.OCX在C:\windows\syswow64(Win7 64位)和C:\windows\system32(Win7 32位/Win XP 32位)中,但据我所知,Access将在启动时检查系统路径以获取引用?据我所知,Access使用注册表来定位控件的GUID,然后定位源OCX/DLL文件。我在Access 2003(事实上是所有版本)中也遇到过同样的问题;我总是把我需要的DLL和OCX与MDB一起分发;事实上,我在VS.Net 2008中编写了一个自定义安装程序,用于注册COM DLL和OCX等。简言之,您确实需要确保在系统注册表中注册的OCX在所有拥有MDB文件的计算机上都是相同的版本。请在中从您的开发计算机复制MSCOMCTL.OCX