¡¡Ay!!, ¡¡Ay!!, que error más tonto he cometido.
No debemos usar parambyname..... sino FieldbyName

.
En un sql, cuando ponemos ":Cod", el Query lo tratará dependiendo del nombre que le demos:
- Si existe un campo en la tabla que se llama "Cod" (case insensitive), ya no es un parámetro de sql, sino el valor del campo "Cod"; para darle un valor debemos usar FieldByName.
- Si no existe ningún campo en la tabla con el nombre "Cod", entonces el Query lo tratará como un parámetro, y en ese caso, debemos usar ParamByName.
A todo lo que se le antepone los ":" se le suele llamar parámetros en SQL, de ahí que no me fijase bien.
Saludos.