【问题标题】:Excel VBA - how to query Access database using column values as a parameter?Excel VBA - 如何使用列值作为参数查询 Access 数据库?
【发布时间】:2013-10-18 13:39:11
【问题描述】:

我有一个 Excel 工作表,其中在 Sheet1 的 A 列中有大约 1000 个项目编号的列表。目前,我将 Sheet1 导入名为 ItemNumbers 的 Access 表并运行以下查询:

SELECT MyTable.ItemNumber, MyTable.ItemName, MyTable.ItemPrice
FROM [ItemNumbers] INNER JOIN MyTable ON [ItemNumbers].ItemNumber = MyTable.ItemNumber
ORDER BY MyTable.ItemNumber;

然后我将输出复制/粘贴到 Sheet2。

如何在 Excel 中的 VBA 中执行此操作并将结果放入记录集中?我可以弄清楚如何遍历记录集并将结果放入 Sheet2。我只是不确定运行查询的代码。

到目前为止,我有以下内容。只需修改它以使用 Sheet1 Column A 中的值。

Dim cn As Object
Dim rs As Object
Dim strSql As String
Dim strConnection As String
Set cn = CreateObject("ADODB.Connection")
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=C:\MyDatabase.accdb"
strSql = "SELECT MyTable.ItemNumber, MyTable.ItemName, MyTable.ItemPrice " & _
         "FROM MyTable " & _
         "WHERE WHERE (((MyTable.ItemNumber)= ??? IS IN Sheet1!A:A ???  )) " & _
         "ORDER BY MyTable.ItemNumber;"             
cn.Open strConnection
Set rs = cn.Execute(strSql)
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

谢谢!!!

【问题讨论】:

标签: excel vba


【解决方案1】:

如果我理解正确;你要问的是join Access 中的一个表和 Excel (ADODB) 中的一个表。

查看来自 SO 的此链接,看看是否有帮助:
Selecting 2 tables from 2 different databases (ACCESS)

我之前没有尝试过将 Access 和 Excel 结合使用,但我猜测它也适用于 Excel。

另一种方法(这肯定会奏效):

  1. 运行不带WHERE 子句的查询并将结果存储在 记录集;
  2. 将您需要的 Excel 工作表中的数据存储在字典中, ItemNumber (PK?) 是关键;
  3. 遍历记录集,并用典型的字典Exists函数检查 如果每条记录的 ItemNumber 在字典中可用;
  4. 如果记录可用,则存储 记录集值在一个单独的数组(或字典)中,您可以 用于进一步操作,(或执行直接操作,如果您想这样做)。

【讨论】:

  • 谢谢!我会检查链接。如果我在没有 WHERE 子句的情况下运行查询,则生成的记录集将超过 100,000 条记录。这会导致问题吗?
  • 检查 100000 条记录需要一些时间(使用我建议的替代方法),但我不确定需要多长时间。您可以测试它是否可行;这是你每天都会做的事情吗?毕竟一定要尝试加入;这将是最快的。或者您可以先将数据导出到 Access 并在那里进行查询?这也是一个可以考虑的选项。
  • 我目前正在尝试 DoCmd.Transferspreadsheet acImport 将 Sheet1 值放入 Access 中的表中,然后进行查询。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 2020-05-15
  • 2014-12-12
  • 2019-10-10
相关资源
最近更新 更多