2016-10-11 20 views
0

我有一個在MS Access中添加新記錄的表單,我試圖創建VBA代碼,在窗體更新後觸發。我想要做的是循環訪問鏈接到表單的表中的列,並檢查已添加的值是否已在列中,如果是,則將所有重複記錄的另一列稱爲「重複」以將其更改爲「是」。通過訪問列循環查找重複

例如,如果用戶添加「邁克向下」,且已存在此名稱在表中的記錄,列「重複」的所有記錄這個名字被更新爲「yes」。 我完全陌生的VBA訪問,到目前爲止,我只找到如何做循環:

Dim dbsMyDB As DAO.Database 
Dim rstMyTable As DAO.Recordset 
Dim frmForm As Form 
intI = 1 
With rstMyDB 
    Do Until .EOF 
    Loop 
     If rstMyTable.Name = frmForm.Name Then 
     .Edit 
     --update column duplicate to "yes" for all duplicates 
     .Update 
     .MoveNext 
     intI = intI + 1 
End With 
+0

爲什麼你會需要一個「複製」列?查詢重複數據並不需要您手動強制執行數據完整性。 – Comintern

+0

你想避免重複,或只是將它們標記爲重複?在第二條記錄添加後,第一條記錄是否會被認爲是重複的? –

+0

所有記錄都有唯一的int類型主鍵,並且重複記錄是不可能的。我試圖標記所有重複的名稱,而不是試圖避免它們,是的,第一條記錄也會被認爲是重複的。該檢查也可以針對電話號碼或郵件地址執行,但首先我想查看是否有可能。我們正在嘗試查看一個人是否第二次申請。 – Ivan

回答

0

使用記錄集

Dim rst As DAO.Recordset 

Set rst = Me.RecordsetClone 

With rst 
    Do Until .EOF 
     If !Name.Value = Me!Name.Value Then 
      If !ID.Value <> Me!ID.Value Then 
       .Edit 
        !Duplicate.Value = True 
       .Update 
      End If 
     End If 
     .MoveNext 
    Loop 
End With 

Set rst = Nothing 
+0

它的工作原理,但是有可能剛添加的記錄也被標記爲重複記錄嗎?現在它的工作方式是當添加一個具有相同名稱的記錄時,只有第一個將被標記爲重複,而不是第二個。 – Ivan

+0

然後忽略當前記錄。見編輯的答案。 – Gustav

+0

工作正常,但是您知道爲什麼只有在窗體關閉時才觸發它?如果一個接一個輸入10個名字,其中有重複的代碼不會被觸發。 – Ivan