【问题标题】:Determine if record exists when updating Access database using Excel VBA使用 Excel VBA 更新 Access 数据库时确定记录是否存在
【发布时间】:2019-10-16 16:39:43
【问题描述】:

我正在尝试更新记录,或者在唯一 ID 不存在时创建记录。

代码给我一个错误,告诉我它会创建重复值。

我需要在我的代码“SQL: If Exists Update Else Insert”中包含这个。

Sub Upload_Excel_to_Access()

Dim wbpath As String

wbpath = Application.ActiveWorkbook.Path

Dim con As Object '' ADODB.Connection
Set con = CreateObject("ADODB.Connection") '' New ADODB.Connection
con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data source=\\at\HRS SD Performance Data\Capacity DB.accdb;"
con.Execute _
"INSERT INTO AssigenedVol_tbl " & _
"SELECT * FROM [Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Users\luga\Desktop\Databasetest\DB Macro Test.xlsm].[rawdata$]"
con.Close
Set con = Nothing
End Sub

表名是“AssienedVol_tbl”

字段为:Process_Identifier、Login、Volume、effDate、ID_Unique(这是数据库中的主键)

【问题讨论】:

  • 您真的在表名中使用了拼写错误的单词吗?
  • 您应该检查哪些唯一索引使用目标表,检查您尝试插入的数据行是否已经存在,以及您要插入的行中是否没有重复键值的行。没有数据我们无法检查出什么问题,代码看起来很好
  • 另外,您可以暂时从目标表中删除唯一索引,执行插入,然后分析列中出现重复的位置,唯一索引在哪里。
  • 我认为其他数据库如 SQLServer 和 MySQL 可以有条件 SQL 用于更新/插入,Access 并没有,但它可以被模拟。查看stackoverflow.com/questions/6199417/upserting-in-ms-access中的最后一个答案
  • 为什么不在 Access 中设置指向工作表的链接并在 Access 中设置代码?为什么要涉及 Excel?

标签: sql excel database vba ms-access


【解决方案1】:

修改插入语句以检查键是否存在。根据您的解释,那将是

Sub Upload_Excel_to_Access()

  Dim wbpath As String

  wbpath = Application.ActiveWorkbook.Path

  Dim con As Object '' ADODB.Connection
  Set con = CreateObject("ADODB.Connection") '' New ADODB.Connection
  con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data source=\\at\HRS SD Performance Data\Capacity DB.accdb;"
  con.Execute _
    "INSERT INTO AssigenedVol_tbl " & _
    "SELECT SRC.* FROM [Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Users\luga\Desktop\Databasetest\DB Macro Test.xlsm].[rawdata$] " _
     & " AS SRC " _
     & "WHERE NOT EXISTS (select 1 from AssigenedVol_Tbl CHK WHERE CHK.ID_Unique = SRC.ID_Unique)"
  con.Close
  Set con = Nothing
End Sub

注意,&'s - 只是为了关注您的 SRC 表被标记的事实,并且您正在将其检查为 CHK。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-15
    • 2019-01-14
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    相关资源
    最近更新 更多