在 2007 年打开和保存的 access 2003 adp 现在在 2003 年表现奇怪
Posted
技术标签:
【中文标题】在 2007 年打开和保存的 access 2003 adp 现在在 2003 年表现奇怪【英文标题】:access 2003 adp opened & saved in 2007 now behaves odd in 2003 【发布时间】:2009-04-15 18:16:14 【问题描述】:我继承了一个使用 sql 2000 作为数据源的 access 2003 ADP 文件。这是我的第一个访问维护项目,没有考虑所涉及的问题,只是在我的开发机器上的 access 2007 中打开它。它当然奏效了,我开始做要求的工作。
我已完成工作并将文件提交给客户,他在 access 2003 中打开该文件并继续收到几个错误,所有这些错误都与未声明的变量有关。正是在这一点上,我意识到没有任何代码文件具有 Option Explicit 集。我再次查看 access 2007 中的项目 - 没有错误。行为就像 access 2007 尊重缺乏 Option Explicit 并按预期工作,但 access 2003 “认为” Option Explicit 已设置,即使它从未出现在任何代码文件中。
我意识到我可以只使用 access 2003 重新完成这项工作,但这会比我想要的更耗时。
【问题讨论】:
【参考方案1】:奇怪的问题 - 我看不出 Access 2003 如何在没有任何选项显式的情况下检查显式变量声明。一定是发生了其他事情。
您能否使用 Access 2003 在您的机器上重现该行为?
你如何真正声明你的变量?无论如何,您都应该设置 Option Explicit。
更新:
因为目标是尝试让 Access 2003 mdb(从 2007 年保存)工作。我会再尝试一件事。
使用 Access 2003 使用 /decompile 开关打开 mdb
备份您的 mdb 通过快捷方式打开您的 mdb(按住 SHIFT 键可停止运行任何代码):msaccess.exe database.mdb /decompile 打开一个模块并编译您的应用程序 保存并关闭访问权限 不反编译再次打开(再次SHIFT) 压缩和修复数据库 关闭访问【讨论】:
我创建了一个 XP 虚拟机,安装了 office 2003 并且能够重现错误。我开始开启 Option Explicit 和声明 vars 的道路,但很快遇到了超出我舒适水平的问题,并决定采用另一条路线。此外,至少有 75 种表格可供转换。 显然这个项目从未编译过 - 2003 年或 2007 年都不会。它在所有带有 Me.ComboBox.ListCount 引用的行上抛出。作为 Access 开发的新手,我不明白这个项目在无法编译的情况下是如何工作的? Access 将运行未编译的项目,但正如您所发现的那样,它不是一个好的实践。在 Access 开发中始终使用 Option Explicit 并始终编译您的项目。祝你好运解决这个烂摊子。 感谢您的帮助,先生。很遗憾,你回答了我的问题。【参考方案2】:这不会对您有太大帮助,但是当我的一个客户切换到 Office 2007 时,我很快了解到,我不应该在 2007 年使用 2003 数据库,然后在 2003 年尝试运行它。 2007 然后转换为 2003 也不起作用。在 2003 年开发,然后在 2007 年运行 2003 db(没有转换)效果很好。大多数时候。
问题第二部分的可能答案: 1. 将您的 2007 db 转换为 2003 格式。 2. 2003年新开一个空分贝 3. 从转换后的 2003 db 中导入所有对象。重新编译,然后在您的客户端机器上试一试。
【讨论】:
我还应该补充一点,我与另一位 Access 开发人员进行了长期通信,他的公司切换到 Office 2007。他花了两个月的时间试图让他的 2003 dbs 在 2007 年工作,但现在正在试验使用 2003 运行时。 FWIW,我在 A2007 上工作不多,但让 A2000/A2003 MDB 在 A2007 中运行(即使在运行时)没有任何问题。但是我从来不会在不编译的情况下编写超过几行代码,所以我总是知道我的应用程序可以编译。当然,OPTION EXPLICIT 应该始终打开。【参考方案3】:我也有这个问题。我花了 2 年时间开发连接到 SQL 后端的 Access 2003 前端。我开始使用 Access 2007,以为我所要做的就是以 2003 格式保存,一切都会好起来的。
并非如此。我所有仍在使用 2003 的用户都报告了问题。
这个问题最终很容易解决。我实际上并没有使用任何 2007 功能,因此更改的只是库引用。我缺少 2 个对 Word 和 Excel 12.0 库的引用,这些库仅在 2007 年打开数据库时自动包含在内。
删除这些引用后,我能够“修复”我的数据库,而无需恢复到早期版本。
【讨论】:
大多数有经验的 Access 开发人员不会添加任何超出 Access 所需的三个默认引用的引用,即 VBA、Access 和 DAO。后期绑定可用于任何外部应用程序,这意味着您的应用程序将适用于任何特定工作站上安装的任何版本的 Word 或 Excel。本机 Access 引用将在运行时修复以指向已安装的版本(除非您将两个版本都安装在一台机器上并且不允许目标版本在运行另一个版本后完全重新注册自己)。以上是关于在 2007 年打开和保存的 access 2003 adp 现在在 2003 年表现奇怪的主要内容,如果未能解决你的问题,请参考以下文章
要在 Access 2007 中打开的 Access 2013 文件
在Access 2007 VBA中,未保存的表单和报表是否可以键入为“AccessObject”..?