共用方式為


使用 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