Me alegro que hayas encontrado la solución... estaba bastante escondida, es lo último en que pensamos.
Sobre los parámetros, bueno, en cuanto se asigna el SQL.TEXT o se añaden textos, se parsea y se crea la lista de parámetros automáticamente (al menos era así con BDE y otros. ADO tenía sus detalles, pero no recuerdo). Lo que intento decir es que si el parámetro está creado y tú intentas crear otro con el mismo nombre, es lógico que dé error.
Si el parámetro no estuviese creado, no podrías asignar su valor

.
Saludos