簡體   English   中英

從Access中的表中刪除記錄

[英]Delete record from table in Access

我正在使用Access數據庫中的兩個表緩解新控件ID 緩解”表格有一個表格。 作為該表單的一部分,可以將控件ID添加到“ 新建控件ID”表中。 我的代碼工作得很好。 我試圖通過Mitigations表單添加從新控件ID表中刪除記錄的功能。

用戶將在Text55中輸入一個字符串,在更新該字段后,應刪除New Control IDs表中的相應記錄。

這是我的代碼:

Private Sub Text55_AfterUpdate()

'removing record with Archer Control ID from New Control IDs table
Dim dbNewInitiatives As DAO.Database
Dim rstMitigations As DAO.Recordset
Dim strSQL As String

    Set dbNewInitiatives = CurrentDb
    strSQL = "SELECT * FROM [New Control IDs] WHERE ([Mitigation ID] = " & Me.[Mitigation ID].Value & ") AND ([Archer Control ID] = '" & Me.[Text55].Value & "') ORDER BY [ID]"
    Set rstMitigations = dbNewInitiatives.OpenRecordset(strSQL, dbOpenDynaset)

    Do While Not rstMitigations.EOF
        rstMitigations.Delete
        rstMitigations.MoveNext
    Loop

rstMitigations.Close

Set rstMitigations = Nothing
Set dbNewInitiatives = Nothing

End Sub

上面的代碼成功找到符合條件的新控件ID表中的所有記錄並刪除它們。 謝謝!

考慮使用Database.Execute方法運行DELETE操作查詢,而不需要DAO記錄集:

Set dbNewInitiatives = CurrentDb
strSQL = "DELETE FROM [New Control IDs]" _
           & " WHERE ([Mitigation ID] = " & Me.[Mitigation ID].Value & ")" _
           & " AND ([Control ID] = '" & Me.[Text55].Value & "')"

dbNewInitiatives.Execute strSQL, dbFailOnError

絕對考慮Parfait的答案,但首先要了解問題是什么總是好的。 對我而言,循環中的邏輯看起來可能不正確。

除非您提供更多詳細信息,否則我將首先假設[新控件ID]。[ID]是該表上的唯一鍵。 如果是這種情況,那么您將該唯一ID存儲在變量strID中,然后在實際嘗試刪除記錄之前移動到下一條記錄。 在這種情況下,循環中的If語句將始終為false,因為當前記錄的[ID]不等於先前記錄的[ID]值。

...
Do While Not rstMitigations.EOF
    '* This compares the previous row's [ID] with the current row's [ID]  '
    If rstMitigations![ID] = strID Then
        rstMitigations.Delete
...

如果[ID]值不唯一 ,那么您的代碼將僅刪除與一系列相同[ID]值中的第一個匹配的后續行。 它會使每個唯一[ID]值的第一行保持不變(即不刪除)。 如果只有一個特定的[ID]值,則永遠不會刪除該行。 那是你要的嗎?

請注意,Parfait的操作查詢將刪除SELECT查詢返回的所有相同記錄。 只是為了記錄,要使用記錄集完成此操作,只需將其簡化即可

....
Set dbNewInitiatives = CurrentDb
strSQL = "SELECT * FROM [New Control IDs] WHERE ([Mitigation ID] = " _
        & Me.[Mitigation ID].Value & ") AND ([Control ID] = " _
        & Me.[Text55].Value & ") ORDER BY [ID]"
Set rstMitigations = dbNewInitiatives.OpenRecordset(strSQL, dbOpenDynaset)

Do While Not rstMitigations.EOF
    rstMitigations.Delete
    rstMitigations.MoveNext
Loop
....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM