ADODB SQL语法 - 访问表内部联接Excel工作表

时间:2016-10-15 04:10:42

标签: sql excel vba ms-access adodb

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

我能够通过建立和打开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,则代码运行正常。

1 个答案:

答案 0 :(得分: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""));"