If the users have permission to delete records and I agree, with some applications or some tables, data should never be deleted, then give the user a button on the form and then add the delete code to the button. Keep in mind that if you use Cascade Delete, you need to understand that deleting the parent will delete the child records. Not all relationships should allow cascade delete. For example, if you have a state table, that would be the 1-side (parent) of the relationship. You probably #1 don't want to delete states at all, although if they haven't been used, it is ok and #2 you don't want to delete a customer if you accidentally try to delete California. Defining the relationship will prevent you from deleting a bunch of customers if you try to delete California. RI will prevent the state from being deleted but NOT if you allow cascade delete on this relationship. So, Cascade Delete is very powerful and I use it frequently but it is NOT appropriate for all relationships. You use it in cases where if the parent record were deleted, the child records would lose their meaning as in if you delete an Order, the OrderDetails have no reason to exist.
If the delete is for a single record on a subform, put a button on the subform if it is in continuous view. If it is in DS view, you can't use a button but you can add an unbound field that can be used for the same purpose. The scary thing is to try to put the delete button for a child record on the parent form. It is too risky because the delete will delete the Current subform record which may not be the record you think it is.
And finally, delete is forever so this is the one case I recommend that you use a prompt to give the user a second chance. Prompts when over used loose their meaning. Users just blow by them because they're used to just saying yes. Eventually, they just stop reading your message. So, Prompt only when the answer is actually critical.
If you start the application understanding that at some point the user will want to delete a record, then you have become a professional or are at least on the way
and then you accomodate the process from day 1. No one who hasn't created several significant applications ever thinks about this up front. That means as Doc suggested, "delete" is not physical for some tables. Instead you have a field or maybe two fields DateDeleted and possibly DeletedBy which get set. The flip side of this is that pretty much ALL queries that select data from the table in question need to ignore rows where DateDeleted is not null. Retrofitting this is certainly possible and maybe you should do that but it depends on the data and the cost of losing it accidentally.