Hi, zevw,
Okay, I have never used MichaelRed's technique. Maybe if Michael is lurking, he can pop in and offer some clarification. Having said that, I've examined this a little and I offer the following observations and suggestions:
1) I don't understand the purpose of the BatchData recordset (BaseData in Michael's FAQ). It's opened, but never referred to again except to close it.
2) After perusing the help files, I discovered some relevant info regarding recordsets and the dbDenyRead option:
a) If the Type argument of the OpenRecordset method is not specified, Access tries to open a table-type recordset if it can. For linked tables and queries, a dynaset-type recordset is opened.
b) This is significant because you are using linked tables, and the dbDenyRead option applies only to table-type recordsets. If you specify the dbOpenTable argument, the dbDenyRead option may then work.
c) In my experiments, trying to specify dbOpenTable for a query always raised an error.
d) The Options argument (where you would place dbDenyRead) is the 3rd argument of the OpenRecordset method, so there needs to be an extra comma between the source and option arguments (unless you are specifying the recordset type).
e) In my tests, the error that was raised when trying to access a table that was locked with dbDenyRead was 3009.
3) So, it seems likely that Michael's FAQ was written in an earlier version of Access/VBA and needs a bit of modification for later versions (not sure which versions are affected - I'm running 2003). I'm not sure how to address the dbDenyRead issue with queries, as it doesn't seem like you can open a table-type recordset from a query, and by extension, dbDenyRead is not available. You might experiment with opening a dummy one-record table recordset, specifying dbDenyRead, before opening any actual BatchNum recordsets, then closing it after you're all through getting your autonumber. Seems like that ought to work.
HTH,
Ken S.