Delete 메서드를 사용하여 레코드 삭제

Delete 메서드를 사용하면 삭제할 Recordset 개체의 현재 레코드 또는 레코드 그룹을 표시합니다. Recordset 개체에서 레코드 삭제를 허용하지 않으면 오류가 발생합니다. 즉시 업데이트 모드인 경우 데이터베이스에서 즉시 삭제됩니다. 예를 들어 데이터베이스 무결성 위반으로 인해 레코드를 삭제할 수 없는 경우 레코드는 Update 호출 후 편집 모드로 유지됩니다. 즉, 현재 레코드에서 이동하기 전에 CancelUpdate를 사용하여 업데이트를 취소해야 합니다(예: Close, Move, 또는 NextRecordset 사용).

일괄 업데이트 모드인 경우 레코드가 캐시에서 삭제되도록 표시되고 UpdateBatch 메서드를 호출할 때 실제로 삭제됩니다. (삭제된 레코드를 보려면 Delete가 호출된 후 Filter 속성을 adFilterAffectedRecords로 설정).

삭제된 레코드에서 필드 값을 검색하려고 시도하면 오류가 발생합니다. 현재 레코드를 삭제하면 삭제된 레코드는 다른 레코드로 이동할 때까지 현재 상태로 유지됩니다. 삭제된 레코드에서 벗어나면 더 이상 액세스할 수 없습니다.

트랜잭션에서 삭제를 중첩하는 경우 RollbackTrans 메서드를 사용하여 삭제된 레코드를 복구할 수 있습니다. 일괄 업데이트 모드인 경우 CancelBatch 메서드를 사용하여 보류 중인 삭제 또는 보류 중인 삭제 그룹을 취소할 수 있습니다.

기본 데이터와의 충돌로 인해 레코드 삭제 시도가 실패하는 경우(예: 다른 사용자가 레코드를 이미 삭제한 경우) 공급자는 Errors 컬렉션에 경고를 반환하지만 프로그램 실행을 중단하지는 않습니다. 런타임 오류는 요청된 모든 레코드에 충돌이 있는 경우에만 발생합니다.

Unique Table 동적 속성이 설정되고 레코드 집합이 여러 테이블에서 JOIN 작업을 실행한 결과인 경우 Delete 메서드는 Unique Table 속성에서 명명된 테이블에서만 행을 삭제합니다.

Delete 메서드는 삭제 작업의 영향을 받는 레코드를 지정할 수 있는 선택적 인수를 사용합니다. 이 인수에 유효한 값은 다음 ADO AffectEnum 열거 상수 중 하나뿐입니다.

  • adAffectCurrent 현재 레코드에만 영향을 줍니다.

  • adAffectGroup 현재 필터 속성 설정을 충족하는 레코드에만 영향을 줍니다. 이 옵션을 사용하려면 Filter 속성이 FilterGroupEnum 값 또는 책갈피 배열로 설정되어야 합니다.

다음 코드는 Delete 메서드를 호출할 때 adAffectGroup을 지정하는 예제를 보여 줍니다. 다음은 일부 레코드를 샘플 레코드 집합에 추가하고 데이터베이스를 업데이트하는 예제입니다. 그런 다음, adFilterAffectedRecords 필터 열거 상수를 사용하여 레코드 집합을 필터링하면 레코드 집합에는 새로 추가된 레코드만 남아서 표시됩니다. 마지막으로 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