why does my database keep telling me that i can not save design changes and that i have to be in exclusive mode after i close out of the form
I said I would stay out of this because I had nothing else to offer, but that turns out to be wrong. I can take a shot at that specific question because the way you framed it clarifies something that I apparently missed earlier.
When you directly assign a new recordset to an open form, it is an action that carries some baggage with it. I think that baggage is the source of your problem.
Your .Recordset change implies subsequent changes to the .RecordSource, .RecordType, and a couple of other properties of the form that would normally be changed on the form's Properties (design-mode) window. The action you are performing with that overlay of Me.Recordset therefore IS a design change. The problem is that you have the form open
and actively running code in
Form View mode, not in
Design mode, and therefore you have some repercussions to address.
In that context, Access is telling you that you can't make that change AND SAVE IT unless you are in Design mode (which you are not) and have the database open in Exclusive mode (again, apparently not the case). The complaint stems from the fact that a "default" Close operation implies the SAVE option. For Microsoft, think about this: Every other Office program (Word, Powerpoint, Excel, etc) saves a document when you close it because that is the default for them. Why would Access be different?
You can change the .ControlSource or .RowSource properties on a form dynamically, but when I last did that, I had to take the approach described by Frothy. I built a CLOSE command button that included an acSaveNo as part of its closure command so that Access would quietly discard all of those source-record changes and revert to my "default" sources. I trapped ALL closures of the form using the Form_Unload event (which has a Cancel option) and disallowed closure unless you used the CLOSE command button to do it. The CLOSE command button "click" event set a flag and then issued the form closure via DoCmd. The other methods of form closure, because they didn't set the flag, got cancelled. FYI, it was adequate to put that flag in the Form's Declaration area at the top of the form's class module.
Frothy's comments about "close what you open" are not 100% popular because there is some truth to the idea that many objects automatically close when their base variables go out of scope. Therefore, your recordset variable in that subroutine would go out of scope the moment you hit the End Sub.
You are playing with a tricky situation - adding multiple references to an open recordset. By that I mean that temporarily, your recordset variable and your form's recordset property are BOTH pointing to the same recordset structure (since you didn't declare a NEW in any part of the process). So a "reference" counter gets ticked for each entity that has that same recordset open. I would as a matter of principle just close the variable-based recordset before I exited the routine. But then again, I am (probably even rightly) accused at times of being somewhat anal-retentive about that. But I happen to second Frothy's suggestion to close what you open.