Hola gente, el otro día estaba probando una rutina que usaba un ADO COMMAND, para ejecutar un Store Procedure de un SQL Server, este Store hacia unos INSERT en la base; como los valores que estaba insertando ya existian en la tabla (y tiene un indice tipo UNIQUE) yo sabia que me tenía que dar Error, mas precisamente el Error 2627, violacion de clave duplicada.
Ejecuto el Command, me interrumpe la rutina de On Error.... cuando leo el error era:
NumError: 0, Descripcion "104"
no entendia que estaba pasando.

Entonces recorro la coleccion de Errores de ADO:
For each oErr in CNN.ERRORS
'leer error: NativeError, SQLState, Description
NextVeo que en realidad tenia 3 errores, y el que me interesaba era el 2do error, no el primero.
Moraleja

Con esto se demuestra que no siempre se puede leer un error de ADO, simplemente con un On Error; Err.num; Err.desc
Yendo un poco mas a fondo, siguiendo el codigo del store procedure, resulta que el error 0, descripcion "104", en realidad era un PRINT '104' que estaba haciendo dentro del store procedure.
Para tener en cuenta: ADO y SQL devuelven como error los print, y los msg de informacion. Pasa que estos no generan una interrupcion tipo On Error, peeero si llega a existir un error, este va a interrumpir en el On Error, y ahi veremos los print como me pasó a mi.
Agrego algo mas, los PRINT y Msg de informacion ( por ej: "Se termino la instuccion) vienen indicados con SQLSTATE: "01000"
Bueno no aburro mas.