Ms access Access:DAO引用guid已更改,导致.mde无法在Win7上的Access 14(2010)中启动

Ms access Access:DAO引用guid已更改,导致.mde无法在Win7上的Access 14(2010)中启动,ms-access,windows-7,vba,dao,Ms Access,Windows 7,Vba,Dao,2011年2月2日:我开始这个帖子的时候,我的M$technet关于它的帖子已经死了。但是有一篇关于这个主题的新帖子,请看一看:。不是解决方案,而是确认7、14和mde的组合至关重要 --原职: 因为我们仍然有使用Office 9(2000)的客户端,所以对于所有Access版本9到14(2010),我们都以.mde文件格式(Access 2000的数据库格式)部署前端,而不是“编译”旧版本的.mde和新版本的Access的.accde。由于他们的经济状况,我们经常在一家公司的客户工作站上发现所

2011年2月2日:我开始这个帖子的时候,我的M$technet关于它的帖子已经死了。但是有一篇关于这个主题的新帖子,请看一看:。不是解决方案,而是确认7、14和mde的组合至关重要

--原职:

因为我们仍然有使用Office 9(2000)的客户端,所以对于所有Access版本9到14(2010),我们都以.mde文件格式(Access 2000的数据库格式)部署前端,而不是“编译”旧版本的.mde和新版本的Access的.accde。由于他们的经济状况,我们经常在一家公司的客户工作站上发现所有Office和Windows版本的混合,所以我们的答案是可能性最小的。在Office 14与Windows 7结合使用之前,.mde是没有问题的。我分析了所有内容,以确保在Access 14与Windows 7的组合中启动.mde时存在一个可重复的问题—XP上的Access 14可以工作

我们在VBA项目中有一些参考资料,其中包括Word和DAO。单词ref.适用于每个Access版本9到14,没有问题,它将自动找到适当的版本,因为Office 9到14的guid相同。在Office12(2007)和14(2010)之间,M$不仅更改了DAO的dll文件名,而且对我的理解至关重要的是,更改了引用GUID。让Access检测Windows 7下Access 14下的新DAO版本将失败,但只有使用.mde、.mdb、.accdb和.accde启动时才会出现问题,.mde将在XP下Access 14中启动,如前所述。所以这是更改的GUID和系统权限的组合。。。做什么?找到一个文件,扫描注册表以获取此处所需的信息


我认为这不会有一个或两个步骤的“技巧”,但如果能给我提示在Windows7中检查什么,甚至如何更改VBA代码来解决这个问题,我将不胜感激。关于最后一个选项:我们有很多明确的定义。。。作为道。。。。在我们的代码中。

由于代码在注释窗口中格式不正确,我必须使用答案。请运行以下代码并报告结果

Sub ViewMoreReferenceDetails()

Dim refIDE As Object

    For Each refIDE In Access.Application.VBE.ActiveVBProject.References
        If refIDE.IsBroken = True Then
            Debug.Print "Broken, GUID - " & refIDE.Guid
        Else
            Debug.Print refIDE.Description & " - " & refIDE.Name & " - " & _
                refIDE.Major & "." & refIDE.Minor & vbCrLf & _
                "       Location - " & refIDE.FullPath
        End If
    Next refIDE

End Sub

我很惊讶一个词引用一个特定的版本会自行修复。除了默认的3个访问引用、Access、VBA和DAO之外,我总是使用后期绑定

DAO在某些情况下可能是一个问题,其中之一是如果您在编译MDE的机器上或在生产环境中安装了多个版本的Access。对Access进行不完整的重新注册可能会导致它被破坏,即使它已注册为Access的主版本。一次完整的安装(或修复Office安装)应该可以解决这个问题

有关其他注意事项,请参阅。它涉及到DAO注册问题,并特别提到了DAO被破坏的情况,但是isbreak返回False。他在那里说的话可能会给你一些解决这个问题的方法


但根据我的经验,您遇到的错误是Access安装已损坏的迹象。

我想知道您是否可以使用条件编译()和从文件添加(Set ref=References.AddFromFile(strFileName))来执行操作?您当前引用的是DAO的哪个版本?3.6?而且,这并不重要,因为它正在工作,我发现很奇怪,对Word的相同引用适用于不同的Word版本。@Remou:我被告知您不能从.mde设置或编辑引用,无论是通过VBA代码还是通过菜单命令。看起来好像访问2010成功地将DAO 3.6引用采用到acedao.dll,更改GUID,但不要使用引用名称(“DAO”),在mdb、accd?和XP下,甚至在mde中。尽管如此,我仍将测试.AddFromFile是否在mde中工作。@Tony,注释:是的,DAO 3.6。正如我对Remou的回答,Access成功地采用了该方法,而没有任何程序员的干预(程序员也不可能干预)更准确地说,是在Access 14计算机上首次启动时,在运行时创建一个新的文件和引用GUID,但不是在Windodws 7下的mde中。每个Windows版本下的Access(运行时)版本inc.14(2010)都使用了Ref这个词,没有问题,但只会向上,因此我在Access 9(2000)上部署了一个带有“编译”的Word 9引用的mde机器。@Tony,回答:代码不会提供任何信息,因为DAO ref IsBreak属性为False。但是,在Access 14中,查询DAO ref的.FullPath将导致mdb和mde中出现错误消息,无论dao360.dll是否存在并已注册。Access显然会在内部重定向DAO调用到acedao.dll,如果有,并且我没有找到触发、允许或控制此采用过程的方法。Access会显示一个消息框,它会在mdb中搜索引用的文件并采用引用。然后“搜索”GUID以查找“DAO”ref已更改。谢谢David,但这与原始帖子中给出的信息不符:Windows 7下Access 14关于DAO ref的行为是可复制的,使用我们的mde。如果在我的机器和一些客户的机器上安装不完整,并且在所有情况下链接都是b,这将是一个重大巧合roken仅适用于MDE,而不适用于MDB和ACCD?s。不幸的是,根据我的经验,单词reference一点问题都没有,我确信单词ref GUID在DAO ref GUID更改时保持不变这一事实与我的问题之间存在关联。至于我的研究,DAO不能延迟绑定,所以我甚至不能尝试这是否是一个问题解决方案。--我饶有兴趣地阅读了这篇链接文章,找到了有关Access 95和97的信息,以及关于损坏的引用的一般处理的信息,但没有找到关于未损坏但未成功适应某个特定领域的新版本的引用的信息