次の方法で共有


Delete メソッドを使用してレコードを削除する

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

バッチ更新モードのとき、レコードはキャッシュからの削除としてマークされ、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