【问题标题】:ADODB SQL Syntax - Access table Inner Join with Excel worksheetADODB SQL 语法 - 使用 Excel 工作表访问表内部联接
【发布时间】:2017-02-24 13:49:33
【问题描述】:

我有一个项目,用户需要填写一个 Excel 文件,然后将数据导出到 Access 数据库。 Excel 文件中收集的数据需要分 3 步导出:(1)导出数据集 1 记录,(2)查询新导入记录的主键(自动编号)的 Access,(3)导出数据设置 2 记录,其中包括作为外键填充的主键。

我可以通过建立和打开 ADODB 连接来完成第一步。但是,我在第二步中遇到了麻烦,我需要对 Access 表和 Excel 进行内部联接。

wlodb.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\" &userSID & "\Desktop\WLO R&C Database_10-4-16.accdb"

sqlFindREMPK = "Select ID " _
& "FROM [test1] a " _
& "INNER JOIN [Excel 8.0;HDR=YES;IMEX=2;DATABASE=C:\User\RED-WIP.xlsm].[REM Upload$] b " _
& "ON a.[REM_ID_Database] = b.[REM_ID_Database] " _
& "WHERE (((a.[REM_ID_Database])=""REM9811044""));"

WLOrs.Open sqlFindREMPK, wlodb

ActiveSheet.Range("A10").CopyFromRecordset (WLOrs)

表格和工作表名称具有相同的字段名称。问题出在 SELECT 子句上。如果我按原样离开,我会收到一条错误消息,指出该字段可以引用 FROM 子句中的多个表。如果我添加诸如 [test1].[ID] 之类的表名,那么我将收到一条消息,指出没有为所需参数提供值。如果我将 Excel 字段名称稍微更改为 ID1 并将 SELECT 子句保留为 ID,则代码运行良好。

【问题讨论】:

  • 您是否尝试过使用别名select a.ID
  • 那行得通。在 FROM 子句中声明别名之前,我没有考虑过使用别名。看起来有点违反直觉,但确实有效。

标签: sql excel vba ms-access adodb


【解决方案1】:

为表提供别名后,您必须在引用该表时使用该别名。您无法再按原始名称访问该表。

sqlFindREMPK = "Select a.ID " _
  & "FROM [test1] a " _
  & "INNER JOIN [Excel 8.0;HDR=YES;IMEX=2;DATABASE=C:\User\RED-WIP.xlsm].[REM Upload$] b " _
  & "ON a.[REM_ID_Database] = b.[REM_ID_Database] " _
  & "WHERE (((a.[REM_ID_Database])=""REM9811044""));"

【讨论】:

  • 或者,我们也可以联系@sgeddes 为这个老问题提供新的答案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 1970-01-01
  • 2017-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多