【问题标题】:How to debug a compiled access database (accde)如何调试已编译的访问数据库 (accde)
【发布时间】:2020-03-16 19:08:25
【问题描述】:

我有一个连接到 SQL Server 表并且工作正常的访问前端。但是,当我将其编译为 accde 文件时,关闭数据库时会出现各种错误。这些错误似乎表明程序仍在寻找表或全局变量的值。隐藏表单的 Form_Close() 事件中有一个例程,用于删除所有指向 SQL Server 后端的链接。那么,如何调试已经编译好的访问数据库呢?为什么编译后的 DB 与未编译 (accdb) 版本的行为不同?

【问题讨论】:

  • 您不能debugaccde。你试过trap 错误吗?发布导致此错误的实际错误和可能的代码。
  • 最常发生的错误是“您作为事件属性设置输入的加载时表达式产生了以下错误:Microsoft Access 数据库引擎找不到输入表或查询“用户”。确保它存在并且它的名字拼写正确。”当用户单击 [OK] 时,程序将正常关闭。
  • 应用程序主窗体上有一个Form_Load()事件,它引用了'User'表,但是为什么关闭应用程序时Form_Load事件会运行呢?我的印象是隐藏的表格总是最后关闭的。真的吗?我有一个隐藏表单,它删除了 Form_Close() 中指向“用户”表的链接。
  • 从主窗体

标签: vba ms-access debugging compiled


【解决方案1】:

您需要使用On error goto LabelName 捕获错误,或者如果您不关心错误,您应该在代码顶部使用On error resume next。您仍然应该发布您的代码以获得更准确的帮助。

【讨论】:

    【解决方案2】:

    你说的是同一台电脑,还是不同的电脑?

    编译后的 accDE 对在不同的机器(甚至相同的版本)上执行非常敏感。原因是编译后的 accDE 采用了您当前的 office 发行版本。 在全局变量和错误处理方面? accDE 是最好的选择,因为未处理的错误不会重新设置本地甚至全局变量。实际上,accDE 就像一列不可阻挡的货运列车。

    如果您的 accDB(未编译)可以在您的计算机上正常运行,那么我从未见过 accDE 不运行的情况,实际上运行得更好,表现得更加稳健。

    所以,不,您不能调试 accDE,但您可以在同一台计算机上调试 accDB。

    如果您在另一台计算机上运行 accDE,那么您在帖子中遗漏了大量、巨大且壮观的信息。

    如果您在同一台计算机上运行 accDE(您创建它时使用的计算机),那么唯一可能的情况是 accDE 文件扩展名正在使用不同版本的访问权限来运行。这很少见 - 因此我会从控制面板、应用程序和功能中找到您的访问版本,然后右键单击并修复您的办公室安装。

    office/access 的补丁版本问题在这里非常重要。原因当然是如果你部署了accDB,它通常会工作,因为access可以(并且确实)检测到Access的当前版本(甚至SP/patch/update)级别不同,然后它可以重新编译代码即时(因为 accDB 有源代码)。 accDE 没有,因此无法重新编译。但是,我仍然强烈建议您部署 accDE 并解决 SP/补丁级别问题,因为与未编译的 accDB 相比,accDE 在操作上要可靠得多。

    如果您在运行 accDB 的同一台计算机上遇到此问题,然后使用该计算机创建 accDE,我会感到非常震惊。如果这是实际情况,那么我将创建一个新的空白 accDB,并从旧的 accDB 导入所有内容,然后确保它可以编译代码(从 IDE 调试->编译)。如果应用程序编译,然后创建 accDE,它应该可以正常工作。因此,如果这是同一台机器,那么您的 accDB 已损坏或损坏。正如我所说,创建一个新的,从旧的导入所有内容,然后从中创建您的 accDE。它会起作用,而且我从未见过 accDB 起作用而 accDE 不起作用(在同一台机器上)的情况。

    【讨论】:

    • 是的,accdb 和 accde 都在同一台机器上。并且 accdb 从 IDE debug>compile 顺利编译。我将尝试您制作新数据库并将所有对象导入其中的技术。我是否纠正了隐藏表单总是在可见表单之后关闭和卸载?
    • 卸载顺序可能会改变。但是,不清楚为什么要删除链接?如果可能的话,我会避免这个过程。基于链接的表单之一可能仍处于打开状态 - 因此它会挂起。您可以(应该)考虑在没有用户/密码的情况下链接所有表。然后您可以在启动时执行一次性登录,因此表链接中没有用户/密码。因此,如果有人将链接导入另一个数据库,他们将无法获取/使用密码。因为编译后的 accDE 运行得更快更好 - 那么你会看到运行更快的 accde 的问题。
    • 链接正在被删除,因为隐藏表单的 Form_Close() 中的例程将它们关闭。
    • 我目前在启动时进行一次性登录,该登录链接到所有表。我不知道如何避免使用用户/密码,因为 SQL 服务器需要它们。有没有办法强制隐藏表单最后卸载?
    • 如果您正在登录到 sql server,那么您不需要在应用程序启动时链接或重新链接表(这是我的全部观点)。如果表链接正确,那么您不需要也不想在链接中保存用户/密码(一次性登录到 sql server 将处理此问题)。我敢打赌,这意味着您不需要也不想在关闭时删除链接,因为它们现在不包含用户或密码。
    【解决方案3】:

    要做的第一件事是反编译您的应用程序...只需 Google Ms Access Decompile。 当您执行反编译并尝试编译时,几乎可以肯定您会发现一些“被遗忘”的错误。
    第二次如果第一次失败是时候实现一个健壮的日志系统了...基于文本文件写入,以避免依赖关系只是工作低:https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/freefile-function
    如果仍然失败,请回复更多信息。

    【讨论】:

      猜你喜欢
      • 2014-10-15
      • 1970-01-01
      • 2013-06-01
      • 1970-01-01
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-14
      相关资源
      最近更新 更多