Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从Excel工作簿中选择不在Access表中的数据_Sql_Excel_Ms Access - Fatal编程技术网

Sql 从Excel工作簿中选择不在Access表中的数据

Sql 从Excel工作簿中选择不在Access表中的数据,sql,excel,ms-access,Sql,Excel,Ms Access,我有一个访问表。这些字段与Excel工作簿的字段匹配。Access表包含Excel工作表中没有的一些记录,反之亦然。然而,有一些重叠。例如: 查阅表1 ID Name Attribute 1 Canada A 2 USA B 3 Mexico A 胜过 Excel中存在但Access中没有的数据应添加到Access表中。预期产出: ID Name Attribute 1

我有一个访问表。这些字段与Excel工作簿的字段匹配。Access表包含Excel工作表中没有的一些记录,反之亦然。然而,有一些重叠。例如:

查阅表1

ID        Name      Attribute
1         Canada    A
2         USA       B
3         Mexico    A
胜过

Excel中存在但Access中没有的数据应添加到Access表中。预期产出:

ID        Name      Attribute
1         Canada    A
2         USA       B
3         Mexico    A
4         France    B
现在,我在Excel工作表上打开一个记录集。我想执行一个类似于

INSERT INTO Table1 (Name, Attribute)
SELECT (Name, Attribute) FROM Recordset
WHERE (Name, Attribute) NOT IN 
      (SELECT Name, Attribute FROM Table1)   
在Access中是否可以这样做?如何引用我的记录集?以下是导致问题的代码:

Sub openWorksheet()
    Dim cn As New ADODB.Connection
    Dim rs1 As New ADODB.Recordset
    Dim strQuery As String
    Dim lastRowIndex As Long
    Dim i As Integer
    Dim wbPath As String
    Dim db As DAO.Database
    Dim rs2 As DAO.Recordset



    wbPath = "C:\Users\david.grandmaison\Desktop\RISE\Rise_Template.xlsx"
    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=" & wbPath & ";" & _
    "Extended Properties=Excel 12.0;"

    strQuery = "SELECT Dist_Ret_Door_ID FROM [Sheet1$]"
    rs1.Open strQuery, cn     

    Set db = CurrentDb
    strQuery = "This is what I'm trying to write"
    db.Execute strQuery

我知道我可以在Excel记录集上循环并逐个检查每个记录,如果它不存在,则添加它,但我正在寻找单个插入,因为循环将花费太长时间。但是,如果我错了,或者没有办法避免,请告诉我。

无法在查询中使用记录集。听起来您应该能够设置到Excel工作表的链接,然后将链接的工作表视为一个表(不能编辑数据除外)。然后您可以搜索主题“SQL Upsert”。使用创建到Excel工作表的链接,就像它是一个Access表一样。然后,您可以在SQLServer中使用它,而不能在查询中使用记录集。听起来您应该能够设置到Excel工作表的链接,然后将链接的工作表视为一个表(不能编辑数据除外)。然后您可以搜索主题“SQL Upsert”。使用创建到Excel工作表的链接,就像它是一个Access表一样。然后可以在SQL中使用它
Sub openWorksheet()
    Dim cn As New ADODB.Connection
    Dim rs1 As New ADODB.Recordset
    Dim strQuery As String
    Dim lastRowIndex As Long
    Dim i As Integer
    Dim wbPath As String
    Dim db As DAO.Database
    Dim rs2 As DAO.Recordset



    wbPath = "C:\Users\david.grandmaison\Desktop\RISE\Rise_Template.xlsx"
    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=" & wbPath & ";" & _
    "Extended Properties=Excel 12.0;"

    strQuery = "SELECT Dist_Ret_Door_ID FROM [Sheet1$]"
    rs1.Open strQuery, cn     

    Set db = CurrentDb
    strQuery = "This is what I'm trying to write"
    db.Execute strQuery