Hola Lenny.
Sería interesante que usaras un
break para ver en que línea se dispara la excepción.
Aunque no trabajo con Zeos ni MySQL, viendo tus líneas de código sólo se me ocurre que en algun evento del DataSet: 'OCPRODUCTOSTAB',
estes realizando alguna accíon que lo saque del estado
dsInsert.
Quizá
AfterInsert sea un buen candidato...
Un saludo.