Ms access VBA检查记录是否存在(如果不存在)

Ms access VBA检查记录是否存在(如果不存在),ms-access,vba,ms-access-2007,Ms Access,Vba,Ms Access 2007,我有两个查询,它们连接各自表中的值(tbl1和tb2)。如果没有匹配项,则使用宏运行追加查询。 我遇到的问题是找出VBA中的正确语法(因为我想使用我自己的警告消息,而不是标准的访问消息) 我已将宏转换为VBA,目前正在使用以下代码: DoCmd.SetWarnings False MsgBox "Append Successful", vbOKCancel, "Append" DoCmd.OpenQuery "appendQuery" DoCmd.SetWarnings True 主要问题是,

我有两个查询,它们连接各自表中的值(tbl1和tb2)。如果没有匹配项,则使用宏运行追加查询。 我遇到的问题是找出VBA中的正确语法(因为我想使用我自己的警告消息,而不是标准的访问消息)

我已将宏转换为VBA,目前正在使用以下代码:

DoCmd.SetWarnings False
MsgBox "Append Successful", vbOKCancel, "Append"
DoCmd.OpenQuery "appendQuery"
DoCmd.SetWarnings True
主要问题是,无论追加是否成功,我仍然会收到相同的消息。有没有这样的说法:

If 'concat1' matches 'concat2' 
MsgBox "Record already exists. Append not executed"
Else run 'appendQuery'
MsgBox "Append Successful"

使用vanilla Access实现这一点的最佳方法是从一个完全不同的方向出发。首先根据插入(追加)查询的筛选条件执行更新查询,如果db.RecordsAffected为0,则该记录不存在,您可以插入

set db = CurrentDb
'we don't actually care about changing things, just want to see if the record exists 
db.Execute("UPDATE sometable SET somevalue = somevalue WHERE ID = 1234")
If db.RecordsAffected = 0 Then
    'id doesn't exist
    db.Execute("INSERT INTO sometable (id,somevalue) VALUES (1234,'MyValue')")
Else
    'id exists, handle the fact that it exists
End if

该查询看起来有点奇怪,但应该完全符合您的要求:

  Dim db as DAO.Database
  Dim SQL as string

  SQL = "INSERT INTO blah (id, somevalue) " & _
        "SELECT TOP 1 1, 'somevalue' FROM blah " & _
        "WHERE NOT EXISTS (SELECT id FROM blah WHERE id=1 AND somevalue='somevalue');"

  set db = currentdb
  db.execute SQL
  if db.RecordsAffected = 0 then
    msgbox "Record already exists; append not executed."
  else
    msgbox "Record appended successfully."
  end if

这里要小心。该
INSERT
将尝试添加
SELECT
块返回的行数。如果没有唯一的约束,它们将被添加。@HansUp提出了一个很好的观点。我假设
id
字段是主键约束。已更新查询以消除该问题。