如何检测您的 Microsoft Access 应用程序是不是已编译,即作为 ACCDE 运行

Posted

技术标签:

【中文标题】如何检测您的 Microsoft Access 应用程序是不是已编译,即作为 ACCDE 运行【英文标题】:How to detect if your Microsoft Access application is compiled, i.e. running as an ACCDE如何检测您的 Microsoft Access 应用程序是否已编译,即作为 ACCDE 运行 【发布时间】:2017-01-18 16:24:46 【问题描述】:

是否有人有任何 VBA 来检测您的 Microsoft Access 2013/2016 应用程序是否作为 ACCDE 运行,即是否已编译?

如果发生错误并且 a) 是我在运行它 (environ("username')) 并且它不是 ACCDE,我希望我的代码停止并中断。

有人有什么建议吗?

【问题讨论】:

【参考方案1】:

改编自https://access-programmers.co.uk/forums/showthread.php?t=229474和http://allenbrowne.com/ser-53.html

Public Function IsACCDE() As Boolean

    ' Init
    IsACCDE = False

    ' This property exists only in compiled DBs (.mde, .accde)!
    ' Ignore error (and stay "False") if not.
    On Error Resume Next
    IsACCDE = (CurrentDb.Properties("MDE") = "T")

End Function

【讨论】:

完美!正是我要找的东西,很有效。谢谢! 如果答案解决了您的问题,您可以accept它,这也标志着问题已解决。 @BarrySeymour 谢谢。不确定那个选项在哪里,但我找到了。【参考方案2】:

我使用的是 Access VBA 的一部分:

If IsCompiled = False Then
        DoCmd.RunCommand (acCmdCompileAndSaveAllModules)
End If

【讨论】:

这回答了一个不同的问题。 IsCompiled 在 .accde 中始终为真,只能在 .accdb 中为假【参考方案3】:

我找不到任何始终给我正确答案的属性。然后我意识到这些方法都是我真正想知道的近似值。现在直接问是不是acde。

Private Function InDevelopment() As Boolean

On Error Resume Next

    InDevelopment = False
    InDevelopment = (InStr(CurrentDb.Properties("Name"), "accde") = 0)
End Function

【讨论】:

以上是关于如何检测您的 Microsoft Access 应用程序是不是已编译,即作为 ACCDE 运行的主要内容,如果未能解决你的问题,请参考以下文章

如何在运行时检测 .NET 4.5 版当前正在运行您的代码?

[Access][Microsoft][ODBC 驱动程序管理器] 无效的字符串或缓冲区长度 Invalid string or buffer length

将 Microsoft Access 组合框中的默认值设置为当前月份

在 Microsoft Access 报告中获取两个计数之间的差异

Microsoft Access 2010 Web 数据库将日期转换为字符串

根据 Microsoft Access 中的日期自动发送电子邮件