@Gasman At that time, the advice was accurate. For reports, Access "helped" us out by rewriting the recordsource into a query that selected ONLY the fields that were bound to controls. Many people ran into this issue due to sorting anomalies. They thought their sort order in the RecordSource query would prevail but it turns out that it didn't and that was the second side effect of the disappearing unbound fields issue. But until recently, the aberration only affected reports. It did not affect forms. Now it affects forms but not as badly as it affects reports. It rarely bothered people in reports because #1, we don't write much code behind reports and #2, even less of it is calculations that include fields that are in the recordsource but not displayed on the report.
However, recently, I ran into a problem with a form. I almost never bind UpdateBy and UpdateDT fields to the form, usually because there is no room for them but I always log this information in the Form's BeforeUpdate event. The problem is tricky though. I can't quite put my finger on when Access rewrites the query but if you run the code without closing the form it seems to work. I always save and compile so that doesn't cause the problem. It seems to happen either when the form is closed or maybe when it is opened the next time or maybe not until a C&R. I can make the error go away by replacing the RecordSource but of course that isn't a permanent fix.
I think the problem happens only when the form is bound to a table rather than a query - again something I rarely do since most of my apps are connected to SQL Server and using forms/reports bound to naked tables defeats the whole purpose of using SQL Server. It may also happen if it is bound to query but you later change the query outside of the form. The form no longer picks up the external changes to the query.
To make it happen. bind a form to a table. Leave at least one field not bound to a control. In the form's BeforeUpdate event, populate the unbound field. In my case it is almost always UpdateBy or UpdateDT. save the code, compile. Save and close the form. When you reopen the form, the code doesn't work.