Actually, I've never addressed the first question--good question!
Execute has a second argument that you can use to set locking and exclusive control options, similar to OpenRecordset. dbFailOnError and dbSeeChanges look like they would generate a run-time error you could trap so that you could try again after a moment. dbDenyWrite looks like it would give you exclusive control of the table.
You could also wrap the Execute call between BeginTrans and CommitTrans calls, if you want to have an all-or-nothing guarantee. Rick Sprague