Manually entered values to queries (Parameters) should be used manually only at the most basic level (a quick query knocked up to test something out), and programatically at a more advanced level (where the values are entered from the code itself). Your usage of this approach is not appropriate as it will not support what you're trying to achieve. Rabbit's suggestion, on the other hand, makes everything simple and straightforward again for you.
A slight alternative would be, using the same form concept, to open the report passing a
WhereCondition parameter to set the
.Filter and an
OpenArgs parameter to pass the data to the report. This leaves complex form references out of the process.
Neither way is much better or worse than the other. They are simply alternatives of which some prefer one and others the other. You choose whichever suits you best. For referencing items on forms though you can check out
Referring to Items on a Sub-Form.