【问题标题】:Excel Insert Into Access Table from Excel defined Table with a Where ClauseExcel 从带有 Where 子句的 Excel 定义的表中插入 Access 表
【发布时间】:2016-05-13 15:22:47
【问题描述】:

有点卡住了。我有一个 excel 表,可以说以下列 [日期]、[姓名]、[邮政编码]、[城市]

还有一个具有相同列名的访问表。

我正在尝试将 excel 数据表插入到访问表中,但想应用 WHERE 子句,以便它忽略访问表中已经存在的日期。

我可以愉快地将所有数据插入到访问表中,但不能成功应用 WHERE 子句忽略现有日期。烦人的是我不能正确引用实际的表名,所以我引用了工作表(但工作正常)。

这是我目前的代码:

Sub TestInsert()

    Dim cnn As ADODB.Connection

    Dim dbPath As String
    Dim xlPath As String
    Dim uSQL As String

    dbPath = "C:\Test\TestDB.accdb"
    xlPath = "C:\Test\TestXL.xlsm"

    'Set Connection string
    Set cnn = New Connection
    cnnstr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath

    'Open connection to db
    cnn.Open cnnstr

        uSQL = "INSERT INTO tbl_ApolloBrochurewareReportTEST " _
            & "SELECT * FROM [Excel 12.0;HDR=YES;DATABASE=" & xlPath & "].[Sheet1$]"


        cnn.Execute uSQL

    cnn.Close

End Sub

任何意见或知识都会很棒,谢谢。

【问题讨论】:

  • 如果您在日期字段上放置一个唯一索引,那么重复记录将被简单地丢弃。如果不应该有任何重复,那么无论如何都应该有这个索引,但是日期字段很少用作唯一字段 - 日期对于这个目的是不可靠的,任何存在的时间元素都将允许这些显然 重复记录。

标签: vba excel ms-access insert where


【解决方案1】:

您应该能够扩展 SQL 表达式:

    uSQL = "INSERT INTO tbl_ApolloBrochurewareReportTEST " _
        & "SELECT * FROM [Excel 12.0;HDR=YES;DATABASE=" & xlPath & "].[Sheet1$] As T " & _
        "WHERE T.Date NOT IN (SELECT [Date] FROM tbl_ApolloBrochurewareReportTEST)" 

【讨论】:

  • 谢谢@gustav 我会放弃的。
  • 辛苦了,谢谢。不敢相信我错过了只是给 excel 表一个别名。我想太多关于 VBA 而不是 SQL 部分。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2013-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-24
  • 2016-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多