Indeed not all ADO interface layers support all CursorTypes. Some support all inconditionally, some offer those the DB engine offers, some support only some (conditionally or not),  etc. The variable support for CursorLocation property makes things even muddier. The same occurs with LockTypes. But all LockTypes can't be implemented only in the ADO wrapper: they can only reflect what the engine is capable of. ADO specifies a fair number of recordset properties, methods and events.