Delete メソッドを使用して、テーブルまたはダイナセットタイプ の Recordset オブジェクト内の既存のレコードを 削除 できます。 スナップショット タイプの Recordset オブジェクトからはレコードを削除できません。 次のコード例では、[運送会社] テーブル内の重複レコードをすべて削除します。
Sub DeleteDuplicateShippers()
Dim dbsNorthwind As DAO.Database
Dim rstShippers As DAO.Recordset
Dim strSQL As String
Dim strName As String
On Error GoTo ErrorHandler
Set dbsNorthwind = CurrentDb
strSQL = "SELECT * FROM Shippers ORDER BY CompanyName, ShipperID"
Set rstShippers = dbsNorthwind.OpenRecordset(strSQL, dbOpenDynaset)
' If no records in Shippers table, exit.
If rstShippers.EOF Then Exit Sub
strName = rstShippers![CompanyName]
rstShippers.MoveNext
Do Until rstShippers.EOF
If rstShippers![CompanyName] = strName Then
rstShippers.Delete
Else
strName = rstShippers![CompanyName]
End If
rstShippers.MoveNext
Loop
Exit Sub
ErrorHandler:
MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Function
Delete メソッドを使用すると、Access データベース エンジンは、警告やプロンプトなしで現在のレコードを直ちに削除します。 レコードを削除しても、次のレコードが現在のレコードになるわけではありません。次のレコードに移動するには 、MoveNext メソッドを使用する必要があります。 削除されたレコードから移動した後は、そのレコードに戻すことはできません。
テーブルタイプの Recordset でレコードを削除した後にレコードにアクセスしようとすると、エラー 3167 "レコードが削除されました" と表示されます。ダイナセットに、エラー 3021 "現在のレコードがありません" が表示されます。
削除されたレコードに Recordset 複製が配置されていて、その値を読み取ろうとすると、 Recordset オブジェクトの種類に関係なくエラー 3167 が表示されます。 ブックマークを使って削除済みのレコードに移動しようとした場合にも、エラー 3167 が発生します。
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。