# DELETE’RECORD

> [HTML Version](deleterecord.htm)

_Rewritten March 2019_

**DELETE’RECORD #file-channel**

DELETE'RECORD deletes the last accessed record and all associated keys. Like UPDATE'RECORD, it relies on the record being previously locked, but unlike UPDATE'RECORD, it ignores the value of the _recnovar_ variable and instead always deletes the last accessed record. Also unlike UPDATE'RECORD, it removes the lock on completion of the operation. 

All errors trap as ASB errors.

**Examples**

The typical delete scenario consists of a GET'LOCKED (or GET'NEXT'LOCKED) to read and lock the record to be deleted, followed by the DELETE'RECORD, e.g.

OPEN #ch, filespec, ISAMP'INDEXED, recnovar, fstatvar , wait'record

...

GET'LOCKED #ch, ISAM'KEY(0) = key\$, rec

if fstatvar = ISAM\_EQ then

    DELETE'RECORD #ch

endif



In a more complex scenario, you may want to lock several records, and then—perhaps based on user input or other logic—decide to delete just one of them. This requires re-accessing the record to be deleted, presumably by its unique key, prior to the delete. Note that as long as the record is locked by the first access, the second access will not affect that lock; i.e. it doesn't matter whether the second access uses the 'LOCKED option or not. In this example we lock a group of "items" using GET'NEXT'LOCKED operations, then allow the user to select one to be deleted: 

defstruct ST\_ITEM            \! record def

    map2 key,s,10            \! item key

    map2 description,s,30

    map2 price,f

endstruct



map1 item, ST\_ITEM

dimx items(0), ST\_ITEM, auto\_extend



open #ch, filespec, ISAMP'INDEXED, recnovar, fstatvar , wait'record

...

? "Locking n items..."

for i = 1 to n

    GET'NEXT'LOCKED #ch, item

    if fstatvar # ISAM\_NF then

        ? "item #";i;" ";item.key;" ";item.description

        items(i) = item      \! save items in array for future reference

    else

        exit    

    endif

next i



input "Enter item # to delete (or 0 for none): ",i

if i > 0 then

    GET #ch, ISAM'KEY(0) = items(i).key, item   \! re-access to set context

    if fstatvar = ISAM\_EQ then

          DELETE'RECORD #ch 

    endif

endif



RELEASE'ALL #ch               \! release all the remaining locked recs



Note the critical step in the above example of doing another GET on the target record prior to the DELETE'RECORD, and that it doesn't matter if it was GET or GET'LOCKED since the record was already locked. 

See the sample program [ISPDEL.BP in EXLIB:\[908,033\]](https://bitbucket.org/microsabio/exlib/src/master/908033/ispdel.bp) for a more complete working version of the above scenario.