2016-04-22 91 views
-1

我有兩個連接在它們各自表中的值的查詢(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" 

回答

0

最好的方法來處理這個與香草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 
0

查詢看起來有點怪,但應該做的正是你要尋找的:

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 
+0

這裏要小心。那個'INSERT'將嘗試添加與'SELECT'部分返回的行數。沒有獨特的約束,他們將被添加。 – HansUp

+0

@HansUp提出了一個很好的觀點。我假設'id'字段是主鍵約束。更新了查詢以消除該問題。 –

相關問題