Hi Paul, good to see you here too.
(Indeed it's always nice to "meet" someone online who you've actually met! ;-)
Alas I have only the one official role - so conversations with myself have little excuse. :-s
Banana
As far as optional parameters - it can be something as simple as a search form. (A common reference in these discussions).
If you want to avoid dynamic SQL then you have to have optional parameters. We can't force a user to specify criteria for every field we want allow searching upon.
There are no implicit default values in Jet - and even if there were we should still have to apply some decision making (just as we would in an SP) to avoid unnecessary (and perhaps index ignoring) data requests.
For example consider a ZLS ("").
We couldn't apply that directly as the parameter value - or the db engine will literally look for fields which contain a ZLS.
It's even worse for Null (as we all know we'd never get *any* matches then...
WHERE FieldName = Null
will always return no matches regardless.
Some developers try to introduce fudges like implementing a Like "*" on a text field or requesting fields to default to their own value
i.e.
WHERE FieldName Like IIF([ParameterValue] = "", "*", [ParameterValue])
or
WHERE FieldName = IIF([ParameterValue] = "", FieldName, [ParameterValue])
Both of those are not equivalent to having passed no parameter though as they will never return any rows with Null in the specified column.
The only way to make it optional is as I mentioned earlier
WHERE (FieldName = [ParameterValue] OR [ParameterValue] Is Null)
or if you wanted to use ZLS
WHERE (FieldName = [ParameterValue] OR [ParameterValue] = "")
but you'd have to choose a way to pass a ZLS to a parameter then :-s.
And that latter OR criteria will generally prevent Jet from using any index which includes the FieldName column. So we're then harming database efficiency, performance and scalability - which is exactly what we're trying to improve by using paramater queries.
Many folks don't realise that even Filters in Access are handled by Jet into query requests for only the required data.
You hear the old mantra chanted that filters are poor and you must set recordsources. But, for example, passing the WhereCondition in the OpenForm method (although it actually just sets a Filter on the called form) sees Access pass that to Jet in the opening request - and Jet asks for the source of the form including the filter criteria as if it were part of the form's recordsource where condition.
Access (i.e. Jet via the ODBC provider) will even do this when accessing server data. The difference being that it can't be guaranteed - as not everything in Jet SQL is parsable by ODBC Jet will even break local query requests down if it can't provide an ODBC parsable statement into that which can be requested upon the server and that which must be processed by the client engine.
But some innefficient requests do get made and before you know it the reputation of linked tables is down the toilet. (Where it has been for some for years - how often have we heard the claim that linked tables
always pull over all records and filter locally? :-s).
It's just not necessarily the case.
(It's perhaps worth pointing out here that the above functionality of Jet using linked tables does imply a greater advantage of saved query definitions Vs local dynamic SQL than in file server mode... As the execution plan involves ODBC decision making too and hence that tiny bit more overhead - but not that much... even saved queries are still parsed by ODBC before execution...).
All that said... do I prefer making ADO requests for the data directly against the server? Yepperooni! Big time!

IMO ADO is utterly appropriate for server data access. (Be it executing SP's or just dynamic SQL ;-)
I'm just saying that alot of default functionality is written off due to small misunderstandings and bad implementations.
And I much prefer MDBs for server Access rather than ADPs because of the versatility that having Jet still there offers. It's a fantastic little db engine - if properly applied in scenarios for which it's intended.
And yes - AFAIK there's no differentiation between linked tables and views. Jet just needs to be "instructed" on the unique index of the view for it to be updatable - which isn't hard.