使用运行时运行的 accde 停止执行任何代码
Posted
技术标签:
【中文标题】使用运行时运行的 accde 停止执行任何代码【英文标题】:accde ran using runtime stops any code from executing 【发布时间】:2011-11-03 09:27:06 【问题描述】:我已将旧的 access 2003 数据库升级到 access 2010。原始数据库分为 access 前端(安装到客户端)和后端(驻留在服务器上)。新数据库使用前端访问,但后端已移至 SQL 服务器。
完成后,我创建了一个 accde 文件并将其打包到安装程序中,以将其分发到所有客户端 PC。安装程序会创建一个桌面快捷方式,在运行时模式下运行 access 2010 并启动前端数据库。
我在本地和我的开发 PC 上对其进行了测试,一切都很好。但是在测试客户端电脑(安装了 Office 2010)上,它会在打开数据库时出现错误,停止所有代码的执行。这显然是一个相当大的错误,会阻止任何人使用数据库。
错误是
The expression On Current you entered has the event property setting produced the following error
The expression may not result in the name of a macro, the name of a user defiend function, or event procedure.
我已确保数据库位于受信任的位置,并在启用所有宏的情况下进行了尝试,但仍然出现相同的错误。在创建 accde 之前,我还确保所有代码都能编译。
我已经在干净的测试电脑上手动复制了 accde 文件,以检查安装程序是否有问题,甚至以完全访问权限打开 accde(即不使用 /runtime 标志)也会出现相同的错误。如果我将 accdb 文件复制到客户端电脑,那么它运行良好,但显然分发 accdb 不是运行数据库的安全方式。
我还尝试创建一个空白 access 2010 db 并从更新版本(这是一个转换为 accdb 的 mdb 文件)导入所有对象,以检查 access 转换原始 mdb 的方式是否有问题- 还是一样的错误。
以前有没有人遇到过这个错误/可以为我解释一下,我很好,真的很难过。
编辑:在测试客户端电脑上玩过之后,我注意到如果我打开 accdb 文件,然后将其另存为 accde,覆盖已安装的版本,那么它会正常工作。但这显然增加了所有客户端的安装开销,并消除了自动化的能力。所以它本身并不是一个真正可行的解决方案......希望它能为某人指明正确的方向。
EDIT2:我还检查并确认所有引用都完好无损,即 dll/ocx/etc 并存在于测试客户端 pc 上
【问题讨论】:
【参考方案1】:这听起来确实像一个典型的参考损坏问题。
我会确保 VBA 引用在此处绝对是最小的。 (在您的开发机器上,创建一个空白 accDB 文件,然后在 VBA 编辑器中查看默认引用 - 这就是您想要的生产 accDB 的内容,然后您将编译成 accDE)。
在将代码编译到 accDE 之前,我还会考虑对 accDB 进行反编译。
此外,SP1 office 更新导致 VBA 损坏问题。如果您的参考资料是好的(并且您正在使用后期绑定来实现 word/outlook 等的任何自动化),那么我会在安装 SP1 之后考虑,然后还为 saccess 2010 安装 VBA 修补程序。所以尝试使用 sp1 + 代码修补程序.
此处的 VBA 修补程序: http://support.microsoft.com/kb/2596585
以上内容相当新——从 10 月 25 日开始,但您要确保首先检查/测试其他步骤,否则您将陷入疯狂追逐,这可能会让您更加悲伤。
【讨论】:
感谢您的回复。看起来该修补程序可能会有所帮助,但是(有各种时间限制)我们将其安装为 accDB 文件并使用 /runtime 标志运行它,因为这也消除了问题。它不像我希望的那样安全,但它现在已为所有用户启动并运行,所以我不会因此而失眠!以上是关于使用运行时运行的 accde 停止执行任何代码的主要内容,如果未能解决你的问题,请参考以下文章