我已经升级了旧的Access 2003数据库以访问2010.原始数据库被拆分为访问前端(安装到客户端)和后端(驻留在服务器上)。新数据库使用前端访问,但后端已移至SQL服务器。
一旦完成,我创建了一个accde文件并将其打包在安装程序中,以将其分发到所有客户端PC。安装程序会创建一个桌面快捷方式,在运行时模式下运行Access 2010并启动前端数据库。
我在本地测试它,在我的开发PC上一切都很好。但是在测试客户端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之前,我还确保所有代码都可以编译。
我已经在干净的测试PC上手动复制了accde文件以检查它是否是安装程序的问题,甚至打开完全访问权限(即不使用/ runtime标志)也会产生相同的错误。如果我将accdb文件复制到客户端PC然后运行正常,但显然分发accdb不是运行数据库的安全方式。
我还尝试创建一个空白访问2010 db并从更新版本(这是一个转换为accdb的mdb文件)导入所有对象,以检查其访问转换原始mdb的方式不是问题 - 仍然是同样的错误。
有没有人遇到过这个错误之前/可以为我解释一下这个错误,我很好并且真的很难过。
编辑:在测试客户端PC上玩之后我注意到如果我打开accdb文件然后将其保存为accde,覆盖已安装的版本,那么它将正常工作。但这显然给所有客户端安装带来了巨大的影响,并且无法实现自动化。所以它本身并不是一个可行的解决方案......希望它能指出一个正确的方向。EDIT2:我还检查并确认所有引用都是完整的,即dll / ocx / etc并出现在测试客户端pc上
答案 0 :(得分:1)
这听起来像是一个典型的破坏参考问题。
我会确保VBA引用在这里绝对最小。 (在你的开发机器上,创建一个空白的accDB文件,然后在VBA编辑器中查看默认引用 - 这就是你想要的生产accDB,然后你将编译成一个accDE)。
我还考虑在将代码编译成accDE之前对你的accDB进行反编译。
SP1办公室更新也导致VBA损坏问题。如果您的引用是正确的(并且您正在使用后期绑定来实现word / outlook等任何自动化),那么我会考虑在安装SP1之后再安装适用于saccess 2010的VBA修补程序。所以请尝试使用sp1 +代码修补程序
这里的VBA修补程序: http://support.microsoft.com/kb/2596585
以上是相当新的 - 从10月25日开始,但是你想确保你检查/测试其他步骤,否则你将会进行一场疯狂的追逐,这可能会让你更加悲伤。