共用方式為


使用 Delete 方法刪除記錄

使用 Delete 方法會將當前記錄或 Recordset 物件中的記錄群組標示為要刪除。 如果 Recordset 物件不允許刪除記錄,就會發生錯誤。 如果您處於立即更新模式,則會立即在資料庫中進行刪除。 如果無法成功刪除記錄(例如,由於資料庫完整性違規),記錄會在呼叫 Update 之後維持在編輯模式中。 這表示您必須使用 CancelUpdate 來取消更新,才能將當前記錄移開(例如,使用 CloseMoveNextRecordset)。

如果您處於批次更新模式,記錄會標示為要從快取刪除,而且當您呼叫 UpdateBatch 方法時,就會進行實際刪除。 (若要檢視已刪除的記錄,請在呼叫 Delete 之後,將 [Filter] 屬性設定為 adFilterAffectedRecords。)

嘗試從已刪除的記錄擷取域值會產生錯誤。 刪除目前記錄之後,已刪除的記錄會維持目前狀態,直到您移至不同的記錄為止。 一旦您離開已刪除的記錄,就無法再存取它。

如果您在交易中嵌套刪除,您可以使用 RollbackTrans 方法來復原已刪除的記錄。 如果您處於批次更新模式,您可以使用 CancelBatch 方法來取消擱置刪除或擱置刪除群組。

如果嘗試刪除記錄失敗,因為與基礎數據發生衝突(例如,另一位使用者已經刪除記錄),提供者會將警告傳回給 Errors 集合,但不會停止程序執行。 只有在所有要求的記錄發生衝突時,才會發生運行時錯誤。

如果已設定 Unique Table 動態屬性,且 Recordset 是在多個數據表上執行 JOIN 作業的結果,則 Delete 方法只會從 Unique Table 屬性中名為 的數據表中刪除數據列。

Delete 方法會採用選擇性自變數,讓您指定哪些記錄會受到 Delete 作業的影響。 這個自變數的唯一有效值為下列其中一個 ADO AffectEnum 列舉常數:

  • adAffectCurrent 只影響當前記錄。

  • adAffectGroup 只會影響滿足目前 Filter 屬性設定的記錄。 Filter 屬性必須設置為 FilterGroupEnum 值或 Bookmarks 的陣列,才能使用此選項。

下列程式碼顯示在呼叫 Delete 方法時,指定 adAffectGroup 的範例。 本範例會將一些記錄新增至範例 Recordset 並更新資料庫。 然後,它會使用 adFilterAffectedRecords 篩選條件列舉常數來篩選 Recordset,這隻會讓 Recordset 中只顯示新增的記錄。 最後,它會呼叫 Delete 方法,並指定所有滿足目前 Filter 屬性設定的記錄(新記錄) 都應該刪除。

'BeginDeleteGroup  
    'add some bogus records  
    With objRs  
        For i = 0 To 8  
            .AddNew  
            .Fields("CompanyName") = "Shipper Number " & i + 1  
            .Fields("Phone") = "(425) 555-000" & (i + 1)  
            .Update  
        Next i  
  
        ' update  
        .UpdateBatch  
  
        'filter on newly added records  
        .Filter = adFilterAffectedRecords  
        Debug.Print "Deleting the " & .RecordCount & _  
                    " records you just added."  
  
        'delete the newly added bogus records  
        .Delete adAffectGroup  
        .Filter = adFilterNone  
        Debug.Print .RecordCount & " records remain."  
    End With  
'EndDeleteGroup