Try this
select * from mydbf where mydbf.myfield=myid into cursor mc
sele mc
scan
select myotherdbf and do stuff
select mydbf
seek mc.keyfield
if found()
delete
endif
sele mc
endscan
if you are working with large numbers of records this should be faster. What I believe is happening with your code is that once you delete the current record the while condition is no longer met and the program drops out of the loop.
SCAN WHILE myDBF.myField = myID
>>>> SELECT myOtherDBF
>>>> *** myOtherDBF manipulation logic goes here
>>>>
>>>> SELECT myDBF
>>>> DELETE
>>>> ENDSCAN
A problem is a problem only as long as it has a possible solution. Lacking that, it becomes a FACT!