Certain queries will be designated as "Read Only" depending on the underlying table definitions and the nature of the inter table joins.
The rules for this can be quite complex, but generally speaking, you need to ensure that any field involved (on either side) in a join between two tables is uniquely indexed if its on the "one" side of the join, and indexed if its on the "many" side. If you dont do this, the query will still return results, but will NOT allow you to make ANY changes to the returned results.
I think that the reason you are getting the error on your form's Add button, is that the form is working with a "read only" underlying query, and hense it cannot add a new record. You can check this by simply running the query independently of the form, and trying to add a new record from the query itself. If it wont allow you to add this record, then thats the problem. In this case, go through the fields in all of the tables associated with the query, and check that they are appropriately indexed.
Finally, I would question the query itself. I prefer to keep the underlying recordsets to forms simple, usually limited to a single (sorted) table. Links to other data can be done through combo boxes, and/or through the use of linked subforms on the main form. This may be food for thought, though your approach might be equally legitimate,
Hope this helps,
Steve Lewy
Solutions Developer
steve@lewycomputing.com.au
(dont cut corners or you'll go round in circles)