次の方法で共有


DAO レコードセットからレコードを削除する

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 のサポートおよびフィードバックを参照してください。