WHERE IN 在 Access VBA 中使用两个记录集进行查询

Posted

技术标签:

【中文标题】WHERE IN 在 Access VBA 中使用两个记录集进行查询【英文标题】:WHERE IN Query with two recordsets in Access VBA 【发布时间】:2010-04-22 07:57:30 【问题描述】:

我在这里的第一篇文章,所以我希望这是正确的区域。我目前正在尝试比较 2 个记录集,其中一个来自 Excel 命名范围,另一个来自 Access 数据库中的表。每个的代码是:

Set existingUserIDs = db.OpenRecordset("SELECT Username FROM UserData")
Set IDsToImport = exceldb.OpenRecordset("SELECT Username FROM Named_Range")

问题是我想以某种方式比较这两个记录集,而不是循环(有大量记录)。有什么方法可以对这些记录集进行连接或类似操作?

我无法在创建记录集之前进行连接,因为一个来自 Excel,另一个来自 Access,因此它们是两个不同的 DAO 数据库。

最终目标是我将只选择要导入的访问表中尚不存在的用户名(因此在 SQL 查询中,它将是 NOT IN(table))。

感谢您提供的任何帮助!

问候, 砖头。

【问题讨论】:

【参考方案1】:

您可以在一个查询中比较来自两个不同来源的数据。您可以在 SQL 中使用 IN 关键字,或者更简单地说,链接到 Access 中的 Excel 表(工作表)并围绕它构建查询。

使用 IN 编辑示例

SELECT * FROM  CompareTable 
LEFT JOIN
   (SELECT * FROM [Sheet1$]  
    IN ''[Excel 8.0;HDR=YES;IMEX=2;DATABASE=C:\Full\Path\AndName.xls]) C
ON CompareTable.CourseKey=c.CourseKey
WHERE c.CourseKey Is Null

Sheet1$ 也可以是 Named_Range。

【讨论】:

我知道我可以比较同一个数据库中的两个不同来源(例如,如果它们都在 Excel 工作表中,或者都在 Access 数据库中) - 但是我如何查询两个不同的来源两个不同的数据库(如上例)? 将 Excel 表链接到 Access 数据库。在 2007 之前的版本中,选择 File->Get External Data->Link table。 我添加了一个使用 IN 的示例。

以上是关于WHERE IN 在 Access VBA 中使用两个记录集进行查询的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WHERE IN 条件下使用自定义 VBA 函数

在access中用vba如何把SQL语句查询到的一个值赋给变量?

如何使用SQL更新VBA Access中包含NULL值的列?

Access 中的 DoCMD.OpenForm - 使用 WHERE 打开具有有限记录集的表单

从一个 Access 数据库复制到另一个 (VBA)

access 的select语句如何like和in用在一起