2014-01-06 43 views
1

我試圖製作一個Access GUI,可以讓用戶在提交前自由編輯數據。從表格內的實時表中刪除數據行?

但是,它不會讓我自由刪除數據,而不會循環運行時錯誤3167「記錄被刪除」。顯然這與我告訴它從一個總是通過表單顯示的活動表中刪除數據的事實有關。

任何人都可以告訴我一種方法,我可以解決這個問題嗎?

Private Sub Cmd_delete_batch_Click() 
Dim RS As Recordset 
Dim ls_Batch_type As String 
Dim ls_batch_no As String 

If MsgBox("This action will delete all selected Mail Merge Items. Are you Sure?", vbYesNo, "Mail Merge Delete Warning") = vbNo Then 
    Exit Sub 
End If 

    Set RS = FRM_Batch.Form.RecordsetClone 
    RS.MoveFirst 
    For i = 1 To RS.RecordCount 
     If RS.Fields("SELECT_FLAG") = True Then 
      CurrentDb.Execute "DELETE * FROM tblFinalMailMerge WHERE SELECT_FLAG = True" 

     End If 
    RS.MoveNext 
Next i 

FRM_Batch.Form.Requery 

1

+1

那麼你的問題是什麼? – 2014-01-06 16:16:09

+0

對不起 - 編輯進一步闡述。它保持循環,記錄從實時表中刪除。我有一個糟糕的循環 - 或者是從活動表中刪除的問題? – user2296381

回答

2

我看來,你想從那裏tblFinalMailMerge用戶已設置SELECT_FLAG爲True刪除所有記錄。所以我沒有看到需要爲此使用記錄集。只需執行DELETE聲明。

If MsgBox("This action will delete all selected Mail Merge Items. " & _ 
     "Are you Sure?", vbYesNo, _ 
     "Mail Merge Delete Warning") = vbYes Then 
    CurrentDb.Execute "DELETE FROM tblFinalMailMerge " & _ 
     "WHERE SELECT_FLAG = True", dbFailOnError 
End If 
+0

Derp derp - 看起來像修復它。謝謝......我想知道爲什麼通過記錄集不能接受...... – user2296381

+0

在另一種情況下,您可以循環訪問一個記錄集並使用'Recordset.Delete'方法有條件地刪除當前記錄集行。但是,'RecordsetClone'是隻讀的,所以這不是一個選項。但我認爲通過執行一條語句來刪除符合條件的所有行是更簡單的...更少的代碼,並且應該比單個基於集合的操作快得多。 – HansUp