Yes, the ? syntax is for parameterized queries but instead of that and the input box you can also specify the parameter, so Access doesn't need to ask, by adding the value to the query string and not the expression, which SQL Server cannot evaluate. To add an integer into the query string you of course need to convert it to string. If you would need to provide a string value you would add single quote marks as string delimiter right before and after the [Form]...[txtName] or whatever expression is pointing to the value of a text valued control, eg
SQL = "SELECT * FROM Persons WHERE [participant.name] = '" & [Forms]![frmGroup_Person]![txtParticipantName] & "'", so the SQL Variable finally has the string SELECT * From Persons Where [participant.name] = 'Smith' and not the Access term for the control. SQL Server has no idea of your form, you send this query over to a process on another server in the general case and all SQL Server sees is the query string, not you environment and variables and object, so everything needed by SQL server has to be sent in. That's the difference to queries to the access database or table.
If you provide expressions in your SQL, they have to be T-SQL Expressions, eg you can Query "Select getdate()" to get the current server datetime, etc. But you can't pass in Expressions or terms, which only Access can evaluate.
Bye, Olaf.