From the MSDN: "The returned Recordset object is always a read-only, forward-only cursor." Use recordsets instead of connections: #define adOpenForwardOnly 0 #define adOpenKeyset 1 #define adOpenDynamic 2 #define adOpenStatic 3 #define adLockReadOnly 1 #define adLockPessimistic ...