A subform we were entering data into stopped working. One day it was working, the next, it was not. The problem turned out to be the datasource; the underlying query started with “select distinct”. For some reason, probably because there were duplicate records in the underlying table, the query caused the form to stop accepting edits — it became a read-only query. The solution was to set the uniqueness to “no”, which removed the “distinct” from the query.
Some posts on the web say as much: the record source has to be writeable, meaning it can’t be a UNION, most JOINs, and DISTINCTs.