I should clarify my earlier comment about the parameter name. From my research, the Jet database engine (which powers Access) requires that parameters start with an "@" symbol. So when I said the parameter was called "UserId", I meant: @UserId . Your query shows "UserId", but the rest of your post says @UserId, so I just want to make sure we're 100% clear on that.
I'm still not fully convinced that's the problem though... Unfortunately I don't know of a way to examine the query sent to Access (SQL Server has a "Profiler" which lets you do this, but I'm not familiar with a similar tool for Access). I can tell you that the parameter is passed as an integer (i.e. 7), not a string.
All I could suggest is trying to use the parameter in an Access query directly (not being deeply familiar with Access, I can't say for sure how to do that).
If you are able to (I realize there may be data confidentiality issues that prevent this) could you either post the full query here, or sent it to me via email if you'd prefer a more confidential route. Your posts have only contained a fragment of the query, and more information might help debug this issue.
Thanks!
-Andrew