【发布时间】:2015-08-01 01:40:38
【问题描述】:
在我的 Access 2013 Desktop 数据库中,我想在将 Excel 表单的行导入表之前通过 VBA 对其进行验证。
问题是导入的 Excel 表格可能在同一列中包含数字、字符串、null 等值,具体取决于用户的错误行,因此这些值最初必须是 VBA 类型的 Variant在验证之前。
如果该行无效(例如,一个值不是数字类型,而它应该是,一个必填字段为空,等等),我希望能够存储它的值并让用户稍后更正它。因此,我正在寻找一种方法来构建一个表,我可以在其中存储这些行,但字段保持不变,因此可以使用可能的混合数据类型。
这似乎是不可能的,因为 Access 表显然需要具有已定义类型的字段,因此没有什么等同于 Variant。
我怎样才能做到这一点?在保持列结构的同时存储 Variant 值行的最简单和最有效的方法是什么?到目前为止,我能想到的唯一方法是使用某个定义的分隔符连接字符串中每一行的这些值,并将其存储在 Access 表的 String 列中,但也许有更简单的方法?
非常感谢您的帮助。
编辑: 阅读您的回答后,我意识到我忘了指明填写和发送 Excel 表单的人(他们通常在他们的计算机上没有 Access)不是 与拥有 Access 数据库并需要导入数据的用户相同的用户。在这种配置中,不可能直接使用 Access 表单来输入数据,这当然会极大地简化任务。虽然我们首先尝试为填写 Excel 表单的人强制执行规则,但总会出现错误,Access 应用程序需要处理这些错误。操作 Access 的用户的导入过程应该尽可能简单(这些用户不是 IT 专家)。
【问题讨论】:
-
这有点令人困惑。您有 MS Access 数据库但使用 Excel 表单?访问表单在许多方面都更加健壮。此外,您可以在 Access 临时表中使用
short text类型(接受字母数字和特殊字符),使用 VBA 验证临时数据,然后迁移到最终的 Access 表。 -
re: '...由于用户的错误' - 虽然我坚信,只要你建立了一个防白痴的东西,世界就会建立一个更好的白痴,这句话告诉我数据验证和其他基本的错误控制程序还没有到位。数据问题应该是例外,而不是常态。见GIGO。
-
如果您的 excel 用户有共享点,那么他们可以在他们的网络浏览器中运行访问网络应用程序。他们不需要安装 Access,数据最终会存储在通过 access 2013 管理的 sql server 数据库中。