将参数从 Excel 传递到 Access 查询

将参数从 Excel 传递到 Access 查询

我有一个 Access (2010,但我也尝试过 Office 2003) 数据库,其中包含许多表格、表单和嵌套查询,这些查询依赖于表单中输入的数据,例如WHERE query1.year=[Forms]![Form1]![Text0];。我现在想将这样的查询链接到 Excel 作为外部数据源,但这会带来问题:

如果我使用标准方法“数据 -> 来自 Access”,那些依赖表单的查询甚至不会显示。如果我创建指向另一个查询的链接,然后在连接属性窗口中更改命令文本以指向我真正想要的查询,我会收到一条错误消息(“查询未运行,或无法打开数据库表。”)。

如果我使用 MS Query(“数据 -> 来自其他来源 -> Microsoft Query”),我可以选择我想要的查询,但会收到错误消息“参数太少。预期 1。”

当然,这完全合理,因为查询依赖于 Excel 中不可用的表单。我尝试在这些查询中使用“真实”查询参数,但结果是一样的。我真的希望 Excel 获取给定单元格中的值并将其作为参数传递给 Access 查询。

因此,理想的情况是这样的:在 Access 中,我有一堆查询,它们依靠参数来完成工作。在 Access 中,我可以使用表单让用户输入这些值。在 Excel 中,这些参数应该从给定的单元格中获取。这可能吗?

答案1

队长,

我 90% 确信可以使用 DAO.querydef 及其“参数”属性来实现这一点。您还可以重写不带参数的查询,然后使用 Excel 中的查询管理器。有关这两个想法的帮助,您可以开始http://www.dailydoseofexcel.com/archives/2004/12/13/parameters-in-excel-external-data-queries/

答案2

除非绝对必要,否则我从不会在已保存的查询中引用表单控件,原因正如您所遇到的——由于对打开的表单的外部依赖,它使查询的可用性降低。

Access 提供了多种在运行时将条件应用于记录集的方法,因此几乎不需要硬连接对表单控件的依赖。

也就是说,如果您可以使用 DDE 连接到数据库,它应该能够完成这项工作。DDE 曾经是 Word 从 Access 数据库合并的默认方式(这让我永远很恼火)。它会启动一个新的 Access 实例(这意味着如果您设置了用户级安全性,它将等待用户名/密码提示,并且永远不会打开您的数据库),然后通过旧式 DDE 命令与其通信。对于您来说,如果您在数据库的启动实用程序中打开所需的表单,它应该可以工作。但是,如果他们需要在运行时让用户填写数据,那么这也行不通。

最终的解决方案是将已保存的查询与表单分离,或者使用 Excel 中的原始 SQL 字符串来检索数据(缺少表单引用)。

相关内容