The correct and future way is to use the ACE object model. You are 100% correct that native oleDB is being dropped from SQL server. It ALSO very important to note that the “general” developer community started dropping ADO when .net came out (the ado.net provider is a VERY different beast and one not reliant on oleDB, but the sqlprovider).
So because of this, significant trends are occurring in our industry.
We are moving away from oleDB. This is in general a Windows-only technology. With the rise of iPads, smartphones, Android etc, then you don’t have such platform specific providers and they don't have oleDB. You thus have to revert back TOWARDS using Open Database Connectivity standards (ODBC). Oracle, Microsoft, MySQL have all stated this is the future road and choice.
While JET is considered obsolete, ACE is not.
SINCE Access 2007 (that is now fully 3 versions), you DO NOT and SHOULD NOT have a reference to DAO. So for the last 3 versions of Access you don’t need nor want or use a reference to the DAO object library.
You now should use the new built in ACE database engine. This means you do NOT need a separate reference to DAO.
There are several advantages to the ACE engine:
You don’t need a DAO reference anymore.
Once reference to the data engine takes care of previous two library references.
There is both an x32 and x64 bit edition available (so .net applications etc. can use an x64 bit edition of this data engine). JET was x32 bit only.
The ACE provider continues to receive updates and enhancements. The same cannot be said for JET or in fact much for ADO either.
ACE now supports store procedures and table triggers. It also has support for SharePoint lists which is web services based.
Also changes were made to Access/ACE to work with SQL Azure.
For using Access with SQL server, you simply use ACE and linked tables. As noted the trend away from ADO MUCH started about 13 years ago when .net came on the scene.
Thus the standard approach and recommend now is ACE + odbc.
So you not missed anything here. The confusion stems much from article that state JET is deprecated but THEN leaves out the VERY important detail that Access for THE LAST 3 versions now does NOT use JET, but uses a new library called ACE.
It is SIGNIFICANT that you don’t need nor want a reference to DAO in your Access applications anymore.
You are certainly using a compatible DAO library, and it still even recommend that you prefix your reocrdset code with DAO (so older existing code will work just fine when if you done this in the past, or you always left out the DAO qualifier when declaring recordsets.
And for things like sql passthrough, you simple can use a saved passthrough query, and do this:
CurrentDb.QueryDefs("MyPass").Execute
or how about some t-sql, you can do this:
With CurrentDb.QueryDefs("MyPass")
.SQL = "ALTER TABLE Contacts ADD MiddleName nvarchar(50) NULL"
.Execute
End If
or call a store procedure of your choice "on the fly" with a parameter
With CurrentDb.QueryDefs("MyPass")
.SQL = "Exec MyStoreProc " & strMyParm1
.Execute
End If
Are not the above so nice and clean? As noted the above code examples tend to be FAR less code and hassle then using oleDB/ADO examples posted.
For the long time users of Access that developed their skills around ODBC and sql server, you don’t have to do anything as the industry much decided what you been doing all along is the recommend approach.
While JET-DIRECT is not supported in ACE, I cannot think of any case when this choice is missed by using the passthrough querydef examples as per above in place of JET direct.
Driver={SQL Server}
? – Lacefield