VBA检查是否存在记录如果不是附加
问题描述:
我有两个连接在它们各自表中的值的查询(tbl1 & tb2)。如果没有匹配,则使用宏运行追加查询。 我遇到的问题是找出VBA中的正确语法(因为我想使用自己的警告消息而不是标准的Access语法)。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"
答
最好的方法来处理这个与香草Access是实际上从一个完全不同的方向。首先根据Insert(append)查询的过滤条件执行Update查询,如果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
@HansUp提出了一个很好的观点。我假设'id'字段是主键约束。更新了查询以消除该问题。 –