Delete Method

See Also      Applies To

Syntax: Recordset

VOIDDelete(VOID);

Syntax: Collections

VOIDcollection.Delete (LPCTSTR pstr );

The collections Delete method syntax has these parts.

Part Description
collection An object variable that represents any collection that can accept new objects (for limitations, see the table at the end of this topic).
pstr A pointer to a string which names the element of the collection to be deleted.

Remarks

You can use the Delete method to delete a current record from a CdbRecordset or a member from a collection, such as a stored table from a database, a stored field from a table, or a stored index from a table.

Recordsets

A Recordset must contain a current record before you use Delete; otherwise, a run-time error occurs.

In an updatable Recordset object, Delete removes the current record and makes it inaccessible. Although you can't edit or use the deleted record, it remains current. Once you move to another record, however, you can't make the deleted record current again. Subsequent references to a deleted record in a Recordset are invalid and produce an error.

You can undo a record deletion if you use transactions and the Rollback method.

If the base table is the primary table in a cascading delete relationship, deleting the current record may also delete one or more records in a foreign table.

Note To add, edit, or delete a record, there must be a unique index on the record in the underlying data source. If not, a "Permission denied" error will occur on the AddNew, Delete, or Edit method call in a Microsoft Jet workspace, or an "Invalid argument" error will occur on the Update method call in an ODBCDirect workspace.

Collections

You can use the Delete method to delete a persistent object. However, if the collection is a Databases, Recordsets, or Workspaces collection (each of which is stored only in memory), you can remove an open or active object only by closing that object with the Close method.

The deletion of a stored object occurs immediately, but you should use the Refresh method on any other collections that may be affected by changes to the database structure.

When you delete a CdbTableDef object from the TableDefs collection, you delete the table definition and the data in the table.

The following table lists some limitations of the Delete method. The object in the first column contains the collection in the second column. The third column indicates if you can delete an object from that collection (for example, you can never delete a CdbContainer object from the Containers collection of a CdbDatabase object).

Object Collection Can you use the Delete method?
CdbDBEngine Workspaces No. Closing the objects deletes them.
CdbDBEngine Errors No
CdbWorkspace Connections No. Closing the objects deletes them.
CdbWorkspace Databases No. Closing the objects deletes them.
CdbWorkspace Groups Yes
CdbWorkspace Users Yes
CdbConnection QueryDefs No
CdbConnection Recordsets No. Closing the objects deletes them.
CdbDatabase Containers No
CdbDatabase QueryDefs Yes
CdbDatabase Recordsets No. Closing the objects deletes them.
CdbDatabase Relations Yes
CdbDatabase TableDefs Yes
CdbGroup Users Yes
CdbUser Groups Yes
CdbContainer Documents No
CdbQueryDef Fields No
CdbQueryDef Parameters No
CdbRecordset Fields No
CdbRelation Fields Only when the CdbRelation object is a new, unappended object.
CdbTableDef Fields Only when the CdbTableDef object is new and hasn’t been appended to the database, or when the Updatable property of the CdbTableDef is set to True.
CdbTableDef Indexes Only when the CdbTableDef object is new and hasn’t been appended to the database, or when the Updatable property of the CdbTableDef is set to True.
CdbIndex Fields Only when the CdbIndex object is new and hasn’t been appended to the database.
CdbDatabase, CdbField, CdbIndex, CdbQueryDef, CdbTableDef Properties Only when the property is user-defined.
CdbDBEngine, CdbParameter, CdbRecordset, Workspace Properties No

Usage

#include <afxole.h>
#include <dbdao.h>

CdbRecordset      rst;
...
rst.MoveLast();         // Make the last record the current record.
rst.Delete();            // Delete the current record.
rst.Close();            // Close the recordset.