There are a few more points to make in this discussion. It is true that DAO was optimized around Jet, and RDO around ODBC. As such, these are the best object libraries to access their respective middle layers, at least with respect to performance.
The main point about ADO is that it is a layer that sits on top of OLE DB, which is a set of COM components that can be used to write data providers. Data providers are basically analogous to data drivers in the DAO/Jet/ODBC world.
So, anyone can write a data provider that is optimized to their data source. (Of course, they could further optimize to same by writing a proprietary API, but it would be harder to access it.)
This means that there is only one object library to have to know to go through a minimum of layers to get to the back end.
Other pros to ADO: a flatter object hierarchy makes for less objects running around in your code. Each object's methods are substantially overloaded to allow maximum flexibility in accessing their functionality. (Note, for example, the number of ways you can set up, say, recordset.open). Finally, the ability to build recordsets on the fly and not have them tie to a database allows ADO to work with non-relational data.
Cons: ODBC is an open standard. OLE is based on COM, and therefore is a proprietary standard. (Resistance is futile.....you will be assimilated......) There can be performance problems, especially if you don't evaluate carefully which layers you are going through. An egregious example would be to use the OLE DB Provider for Jet to access an ODBC database.
Bob Rodes