Delete メソッドを使用すると、現在のレコードまたはレコードのグループが Recordset オブジェクトに削除対象としてマークされます。 Recordset オブジェクトでレコードの削除が許可されていない場合は、エラーが発生します。 即時更新モードの場合は、データベース内ですぐに削除が行われます。 レコードを正常に削除できない場合 (データベースの整合性違反など)、Update の呼び出し後もレコードは編集モードのままになります。 これは、現在のレコードから移動する前に、CancelUpdate を使用して更新を取り消す必要があることを意味します (たとえば、閉じる、の移動、NextRecordset を)。
バッチ更新モードの場合、レコードはキャッシュから削除対象としてマークされ、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